之间的主要区别是:
dt = new Date();
ms = Date.parse(dt);
和
dt = new Date();
ms = dt.getTime();
他们有相同的输出,但有什么区别?我应该使用哪一个?
答案 0 :(得分:9)
第一个版本将Date
转换为字符串并对其进行解析,这是一件非常毫无意义的事情 - 我怀疑在某些情况下可能会丢失信息。 (想象一下在DST转换期间,当时钟返回时 - 相同的本地时间在那个小时内出现两次,并且我不知道字符串表示是否会区分两次出现。)
在我看来,第二个更清洁。一般来说,当你不需要字符串转换时应该避免字符串转换 - 它们通常会导致问题,而你正在尝试做的事情中没有任何关于字符串表示的 。< / p>
除非您实际上需要其他地方的Date
,否则使用起来会更简单:
ms = new Date().getTime()
甚至更好,使用静态now()
方法:
ms = Date.now()
答案 1 :(得分:3)
虽然这是一篇很老的帖子,但我会留下我的答案给那些晚于我这里访问的人。
dt = new Date();
// often false, occasionally true
Date.parse(dt) === dt.getTime()
这是因为当dt.toString()
内部调用Date.parse(dt)
时,您将丢失有关毫秒的信息。至少对于Chrome(63.0.3239.84)和Firfox Quantum(57.0.3),他们就像这样实现Date对象的toString()
方法。您可以自己尝试以下示例。
dt = new Date('2018.1.1 01:01:01.001')
dt.getTime() // 1514739661001
Date.parse(dt) // 1514739661000
只有在毫秒等于0时捕获Date.parse(dt)
时, dt.getTime()
才等于dt
。
答案 2 :(得分:2)
parse函数将ToString运算符应用于其参数,并将结果字符串解释为日期;它返回一个数字,UTC时间值对应于日期。该字符串可以解释为本地时间,UTC时间或某个其他时区的时间,具体取决于字符串的内容。
根据通用时间返回与指定日期的时间对应的数值。
答案 3 :(得分:1)
表现将是最大的不同。在这两种情况下,您都会分配Date instance。在第一个示例中,您将日期实例传递到期望parse()的String。 JavaScript引擎将在Date上调用toString(),它还将为日期分配一个String。基本上,它与:
相同dt = new Date(); // allocate a Date
dateString = dt.toString(); // allocate a String
ms = Date.parse(dateString); // Total: 2 allocations
在第二个示例中,您在Date实例上调用getTime()方法,这将消除字符串分配。
dt = new Date(); // allocate a Date
ms = dt.getTime(); // Total: 1 allocation
消除所有分配的另一个选择是拨打Date.now():
ms = Date.now(); // Total: 0 allocations
这将以ms为单位直接返回时间而不构造其他对象。