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

Difference between Date.parse() and .getTime()

本文关键字:区别 之间 parse Date getTime      更新时间:2023-09-26
两者

之间的主要区别是什么:

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

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

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

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

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

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

ms = new Date().getTime()

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

ms = Date.now()

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

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 的时刻捕获dt时,Date.parse(dt) 才等于 dt.getTime()

Date.parse(dt)

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

获取时间()

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

性能将是最大的区别。 在这两种情况下,您都分配一个 Date 实例。 在第一个示例中,您将日期实例传递给 parse(),它需要一个字符串。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

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