date = new Date(); d.valueOf()vs Date.now()

时间:2015-10-17 07:35:23

标签: javascript

我开始使用JavaScript。我咨询了我的同事如何获得当前时间。

他用这段代码告诉我:

onload

但大多数人这样做:

> date = new Date()
> date.valueOf()

第二种方法更简单,更易读。

如果我想说服我的同事使用第二个,我应该如何向他解释差异呢?

4 个答案:

答案 0 :(得分:9)

有几种方法可以在JavaScript中获取当前时间:

正如评论和MDN链接中所述,Internet Explorer 8不支持Date.now()。因此,如果要考虑IE 8兼容性,则应使用new Date().valueOf(),代价是代码可读性略有下降。

或者如果您想使用Date.now()但必须与不支持它的浏览器兼容,您可以在JavaScript文件中的某处放置以下代码,这将增加对它的支持。

if (!Date.now) {
    Date.now = function() {
        return new Date().getTime();
    }
}

答案 1 :(得分:5)

阅读完MDN后,似乎new Date().getTime()new Date().valueof()Date.now()在功能上都是等效的。 然而Date.now()仅在不同版本的浏览器中受支持,最重要的是IE9。因此,如果IE9之前的支持很重要,您可能需要进行填充。

编辑:真的,唯一关心的是IE。不是一直吗? ;)

答案 2 :(得分:0)

2019年答案

由于我们不再关心IE8,因此只有两种方法很有趣:

  • new Date()-创建一个表示当前日期/时间的Date对象
  • Date.now()-返回自世界标准时间1970年1月1日午夜以来的毫秒数。

(较早的答案中提到的其他两种方法在功能上等效于Date.now(),但看上去更难看,并且可以在IE8中使用。)

从风格上讲,我发现在处理间隔的代码中使用Date.now()更清楚(通常从较晚的日期减去较早的日期以计算经过的时间),而new Date()用于时间戳,例如那些写入数据库的文件。

答案 3 :(得分:0)

当我需要时间戳时,我通常使用+new Date()+new Date().toString(36)

最近我更改为Date.now(),因为它效率更高,或者有一天效率会提高。

从技术上讲,操作系统将日期时间报告为原始时间,通过调用new Date(),JavaScript引擎必须创建一个带有原型的对象(该对象通过引用传递,并且必须在以后进行垃圾回收),然后执行另一个函数调用的价值。

Date.now可能是全局Date对象的静态函数,该函数对操作系统报告的值进行简单的数学运算

我没有检查所有JavaScript引擎的源代码,以确保Date.now不会创建日期实例,但是它会更有效,或者有一天会变得更有效率。