Javascript Date.parse()和.getTime()之间的差异
以下两者之间的主要区别是什么:Javascript Date.parse()和.getTime()之间的差异,javascript,date,Javascript,Date,以下两者之间的主要区别是什么: dt = new Date(); ms = Date.parse(dt); 及 它们的输出相同,但有什么区别?我应该用哪一个呢? parse函数将ToString运算符应用于其参数,并将结果字符串解释为日期;它返回一个数字,即与日期对应的UTC时间值。根据字符串的内容,字符串可以解释为本地时间、UTC时间或其他时区的时间 根据世界时间返回与指定日期的时间相对应的数值。第一个版本将日期转换为字符串并对其进行解析,这是一件毫无意义的事情,我怀疑在某些情况下可能会丢
dt = new Date();
ms = Date.parse(dt);
及
它们的输出相同,但有什么区别?我应该用哪一个呢?
parse函数将ToString运算符应用于其参数,并将结果字符串解释为日期;它返回一个数字,即与日期对应的UTC时间值。根据字符串的内容,字符串可以解释为本地时间、UTC时间或其他时区的时间
根据世界时间返回与指定日期的时间相对应的数值。第一个版本将日期转换为字符串并对其进行解析,这是一件毫无意义的事情,我怀疑在某些情况下可能会丢失信息。(想象一下,在DST转换期间,当时钟倒转时——同一个本地时间在该小时内出现两次,我不知道字符串表示是否会区分这两次出现。) 在我看来,第二种方法要干净得多。一般来说,当您不需要字符串转换时,您应该避免它们-它们通常会导致问题,并且您尝试做的事情中没有任何本质上与字符串表示有关的内容 除非您在其他地方实际需要
日期
,否则使用它会更简单:
ms = new Date().getTime()
或者更好地使用静态方法:
表现将是最大的区别。在这两种情况下,您都会分配一个。在第一个示例中,您将日期实例传递到预期的日期实例中。JavaScript引擎将在日期调用toString(),这也将为日期分配一个字符串。基本上,这与:
dt = new Date(); // allocate a Date
dateString = dt.toString(); // allocate a String
ms = Date.parse(dateString); // Total: 2 allocations
在第二个示例中,您正在日期实例上调用该方法,这将消除字符串分配
dt = new Date(); // allocate a Date
ms = dt.getTime(); // Total: 1 allocation
取消所有拨款的另一种选择是:
这将直接返回毫秒的时间,而不构建其他对象。虽然这是一篇旧文章,但我将把我的答案留给比我晚到这里的人
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()。您可以自己尝试以下示例
dt = new Date('2018.1.1 01:01:01.001')
dt.getTime() // 1514739661001
Date.parse(dt) // 1514739661000
Date.parse(dt)
等于dt.getTime()
只有当dt
在毫秒等于0的时刻被捕获时才是如此。whoa,我实际上不需要字符串,因为我计算了结果,谢谢你的回答和关于更简单用法的+回答:)
ms = Date.now(); // Total: 0 allocations
dt = new Date();
// often false, occasionally true
Date.parse(dt) === dt.getTime()
dt = new Date('2018.1.1 01:01:01.001')
dt.getTime() // 1514739661001
Date.parse(dt) // 1514739661000