【问题标题】:Why does Date.now - a given date work? Documentation shows that Date.now() returns the ms since 1970为什么 Date.now - 给定日期有效?文档显示 Date.now() 返回自 1970 年以来的毫秒
【发布时间】:2022-01-21 15:21:05
【问题描述】:

const daysFromNow = (date) => Math.round((date-Date.now())/(1000*3600*24))

console.log(daysFromNow(new Date('07/04/2020'))); 

//result is -534 

鉴于上述情况,为什么它会起作用?我读过 .now() 会返回自 1970 年以来的 ms。传入的日期是否也包含自 1970 年以来的 ms 值?

【问题讨论】:

  • 是的,因为“日期对象包含一个表示自 1970 年 1 月 1 日 UTC 以来的毫秒数的数字。”:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…。此外, Date 对象在您的问题中使用哪个时期并不重要,因为您只是在计算两个日期之间的相对差异。他们对时间的绝对参考并不重要。

标签: javascript date


【解决方案1】:

传入的日期是否也包含自 1970 年以来的毫秒值?

Date 对象代表地球上的一个特定时刻,所以是的,您可以检索自 1970 年以来的毫秒数(以毫秒为单位)。

Date 对象有一个 valueOf 函数,它返回 Date 的原始值:

1970 年 1 月 1 日 00:00:00 UTC 和给定日期之间的毫秒数。

所以(new Date()).valueOf()Date.now() 是等价的:

console.log((new Date()).valueOf())
console.log(Date.now())

date - Date.now() 的情况下调用valueOf 进行转换,因为dateDate 对象并且Date.now() 返回一个数字。

这里是一个带有valueOf 函数的自定义对象示例:

let test = {
  valueOf() {
    return 5;
  }
}

console.log(test - 1);

【讨论】:

    【解决方案2】:

    这是因为valueOf 属性而起作用。该属性返回一个数字,在 js 中的所有对象中实现。你也可以在你的对象中覆盖它。

    这里是一个用于创建添加链js函数的示例。

    function add(x) {
      const fn = (y) => add(x + y);
      fn.valueOf = () => x;
      return fn;
    }
    
    const addTen = add(5)(5);
    
    console.log(addTen + 1) // 11

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    • 2013-01-20
    • 2019-12-04
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多