我开始使用JavaScript。我咨询了我的同事如何获得当前时间。
他用这段代码告诉我:
onload
但大多数人这样做:
> date = new Date()
> date.valueOf()
第二种方法更简单,更易读。
如果我想说服我的同事使用第二个,我应该如何向他解释差异呢?
答案 0 :(得分:9)
有几种方法可以在JavaScript中获取当前时间:
new Date()
创建一个代表当前日期/时间的Date
对象new Date().valueOf()
返回自UTC时间1970年1月1日午夜起的毫秒数new Date().getTime()
功能相当于new Date().valueOf()
Date.now()
功能上与上述两种方法相同正如评论和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)
由于我们不再关心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不会创建日期实例,但是它会更有效,或者有一天会变得更有效率。