Date.parse()和.getTime()之间的区别

时间:2013-09-21 18:10:42

标签: javascript date

之间的主要区别是:

dt = new Date();
ms = Date.parse(dt);

dt = new Date();
ms = dt.getTime();
他们有相同的输出,但有什么区别?我应该使用哪一个?

4 个答案:

答案 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)

Date.parse(dt)

parse函数将ToString运算符应用于其参数,并将结果字符串解释为日期;它返回一个数字,UTC时间值对应于日期。该字符串可以解释为本地时间,UTC时间或某个其他时区的时间,具体取决于字符串的内容。

getTime()

根据通用时间返回与指定日期的时间对应的数值。

答案 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为单位直接返回时间而不构造其他对象。