javascript return new Date();date.valueOf() www.example.com ()

vwhgwdsa  于 2023-04-28  发布在  Java
关注(0)|答案(4)|浏览(97)

我开始使用JavaScript。我咨询了我的同事如何获得当前时间。
他用这个代码告诉我:

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

但大多数人是这样做的:

> Date.now()

第二种方法更简单,可读性更强。
如果我想说服我的同事使用第二个,我应该如何向他解释差异?

ibrsph3r

ibrsph3r1#

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

正如在评论和MDN链接中提到的,Internet Explorer 8不支持Date.now()。因此,如果需要考虑与IE8的兼容性,您应该使用new Date().valueOf(),但代价是代码的可读性会略有下降。
或者,如果你想使用Date.now(),但必须与不支持它的浏览器兼容,你可以将以下代码放在JavaScript文件中的某个地方,这将增加对它的支持。

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

xfb7svmp2#

2019年答案

由于我们不再关心IE8,只有两种方法是有趣的:

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

(The另外两个在老答案中提到的方法在功能上等同于Date.now(),但看起来更丑,在IE8中工作。)
作为一种风格,我发现在处理间隔的代码中使用Date.now()更清楚(通常从较晚的日期中减去较早的日期以计算经过的时间),而new Date()用于时间戳,例如。例如,写入数据库的那些。

bbmckpt7

bbmckpt73#

在阅读MDN之后,似乎new Date().getTime()new Date().valueof()Date.now()在功能上都是等效的。* 然而 *,Date.now()仅在不同版本的浏览器中支持,最重要的是IE9。因此,如果PreIE 9支持很重要,您可能需要polyfill。
编辑:真的,唯一关心的是IE。不总是这样吗;)

owfi6suc

owfi6suc4#

当我需要时间戳时,我通常使用+new Date()+new Date().toString(36)
最近我换到了Date.now(),因为它更有效率或者有一天会变得更有效率。
从技术上讲,操作系统将日期时间报告为原语,通过调用new Date(),JavaScript引擎必须创建一个具有原型的对象(通过引用传递,并且必须在以后进行垃圾收集),然后执行valueOf的另一个函数调用。
但是,Date.now可以是全局Date对象的静态函数,它对从OS报告的值进行简单的数学运算
我没有检查所有JavaScript引擎的源代码,以确保Date.now不会创建日期示例,但它更高效,或者有一天会变得更高效。

相关问题