Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Date.parse()和.getTime()之间的差异_Javascript_Date - Fatal编程技术网

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