之间的主要区别是什么:
dt = new Date();
ms = Date.parse(dt);
和
dt = new Date();
ms = dt.getTime();
它们具有相同的输出,但有什么区别?我应该使用哪一个?
之间的主要区别是什么:
dt = new Date();
ms = Date.parse(dt);
和
dt = new Date();
ms = dt.getTime();
它们具有相同的输出,但有什么区别?我应该使用哪一个?
第一个版本将 a 转换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),它们是这样实现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
性能将是最大的区别。在这两种情况下,您都分配了一个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
这直接以毫秒为单位返回时间,而不构造其他对象。