13

之间的主要区别是什么:

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

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

它们具有相同的输出,但有什么区别?我应该使用哪一个?

4

4 回答 4

16

第一个版本将 a 转换Date为字符串并对其进行解析,这是一件毫无意义的事情——我怀疑在某些情况下可能会丢失信息。(想象一下在 DST 转换期间,当时钟倒退时 - 相同的本地时间在该小时内出现两次,我不知道字符串表示是否会区分两次出现。)

在我看来,第二个明显更干净。通常,当您不需要字符串转换时,您应该避免它们 - 它们通常会导致问题,并且您尝试做的事情本质上与字符串表示无关。

除非您实际上需要其他Date地方,否则使用起来会更简单:

ms = new Date().getTime()

或者更好的是,使用静态now()方法:

ms = Date.now()
于 2013-09-21T18:13:30.167 回答
7

虽然这是一个旧帖子,但我会将答案留给比我晚来这里的人。

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),它们是这样实现toString()Date 对象的方法的。您可以自己尝试以下示例。

dt = new Date('2018.1.1 01:01:01.001')
dt.getTime() // 1514739661001
Date.parse(dt) // 1514739661000

Date.parse(dt)仅当在毫秒等于0 的时刻捕获dt.getTime()时才等于。dt

于 2018-01-04T14:40:26.940 回答
2

日期解析(dt)

parse 函数将 ToString 运算符应用于其参数并将结果字符串解释为日期;它返回一个数字,即与日期对应的 UTC 时间值。根据字符串的内容,该字符串可能被解释为本地时间、UTC 时间或某个其他时区的时间。

获取时间()

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

于 2013-09-21T18:13:23.493 回答
1

性能将是最大的区别。在这两种情况下,您都分配了一个Date 实例。在第一个示例中,您将日期实例传递给parse(),它需要一个String。JavaScript 引擎将在 Date 上调用 toString() ,这也会为日期分配一个字符串。基本上,它与以下内容相同:

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

这直接以毫秒为单位返回时间,而不构造其他对象。

于 2013-09-21T19:13:59.363 回答