如果我给Date.prototype.getTime()参数怎么办?



我用两种方式创建日期:

  • 新日期(">日期的).getTime ();
  • 新日期()。取得时间(一些日期");

我是在MDN上读到Date.prototype.getTime()没有参数之前做的。这意味着第二种方式是错误的。尽管如此,它以正确的方式给出相同的日期值(new Date('*some date*').getTime();),但毫秒数不同,我不明白为什么。

谁能给我解释一下?

(function () {
let dateToCount = "Jan 01, 2022 00:00:00";
let date1 = new Date(dateToCount).getTime();
let date2 = new Date().getTime(dateToCount);
console.log(Date(date1).toString()); // Tue Oct 19 2021 22:41:59 GMT+0300 (Eastern European Summer Time)
console.log(Date(date2).toString()); // Tue Oct 19 2021 22:41:59 GMT+0300 (Eastern European Summer Time)
console.log(`date1 = ${date1} ms`); // date1 = 1640988000000 ms
console.log(`date2 = ${date2} ms`); // date2 = 1634672519002 ms
console.log(`date1 - date2 = ${+date1 - (+date2)} ms`);  // date1 - date2 = 6315480998 ms
})();

它给出了相同的日期值

不,它没有-只是当你调试console.log(Date(date1).toString());时,你掉进了另一个陷阱:在调用Date时错过了new操作符。正如MDN所说:

调用Date()函数(不带new关键字)返回当前日期和时间的字符串表示形式,与new Date().toString()完全相同。在Date()函数调用中给出的任何参数(没有new关键字)都会被忽略;无论调用它时是否带有无效的日期字符串——或者甚至使用任意对象或其他原语作为参数——它总是返回当前日期和时间的字符串表示形式。

所以如果你也修复了这个,你会意识到你从getTime()返回的两个不同的毫秒值实际上代表了两个不同的日期:

const dateToCount = "Jan 01, 2022 00:00:00";
const date1 = new Date(dateToCount).getTime();
const date2 = new Date().getTime(dateToCount);
console.log(new Date(date1).toString()); // Sat Jan 01 2022 00:00:00, as expected
console.log(new Date(date2).toString()); // Surprise!
console.log(`date1 = ${date1} ms`);
console.log(`date2 = ${date2} ms`);

相关内容