给Date.prototype.getTime()传参会怎么样?两种Date用法毫秒值差异疑问
问题成因详解
1. 两个时间戳存在差异的原因
- 第一种写法
new Date(*some date*).getTime()是符合规范的正确用法:首先会基于你传入的目标日期字符串Jan 01, 2022 00:00:00实例化Date对象,getTime()返回该目标日期对应的毫秒时间戳,也就是你代码里date1的1640988000000。 - 第二种写法
new Date().getTime(*some date*)是无效用法:- 首先
new Date()无参数时,实例化的是代码运行瞬间的当前系统时间对应的Date对象 Date.prototype.getTime()本身不接收任何参数,你传入的日期字符串会被直接忽略,返回的是当前时间的时间戳,也就是你代码里date2的1634672519002,这个值就是你运行代码那一刻的时间,自然和2022年1月1日的时间戳存在巨大差值。
- 首先
2. 为什么打印的日期字符串看起来一致?
你调用的是不带new关键字的Date()方法,该方法的固有特性是:无论传入什么参数,都会直接返回调用瞬间的当前时间字符串,完全不会解析你传入的时间戳参数。
如果换成正确的时间戳解析方式new Date(date1).toString()和new Date(date2).toString(),打印结果会完全不同,分别对应2022年1月1日和你运行代码的时间。
可验证的修正代码
(function () { let dateToCount = "Jan 01, 2022 00:00:00"; let date1 = new Date(dateToCount).getTime(); let date2 = new Date().getTime(dateToCount); // 修正打印方式,正确解析时间戳 console.log(new Date(date1).toString()); // Sat Jan 01 2022 00:00:00 GMT+0300 (Eastern European Summer Time) console.log(new 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 })();
内容的提问来源于stack exchange,提问作者Ivan Chukhalo
相关产品推荐
相关产品推荐

