开发者问题收集

如何在 JavaScript 中获取时间戳?

2008-10-21
4396580

我想要一个代表当前日期和时间的数字,例如 Unix 时间戳

3个回答

以毫秒为单位的时间戳

要获取自 Unix 纪元 以来的毫秒数,请调用 Date.now :

Date.now()

或者,使用一元运算符 + 调用 Date.prototype.valueOf :

+ new Date()

或者,直接调用 valueOf :

new Date().valueOf()

要支持 IE8 及更早版本(请参阅 兼容性表 ),为 Date.now 创建一个 shim :

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

或者,调用 getTime 直接:

new Date().getTime()

以秒为单位的时间戳

要获取自 Unix 纪元 以来的秒数,即 Unix 时间戳

Math.floor(Date.now() / 1000)

或者,使用按位或向下取整稍微快一点,但可读性也较差,并且将来可能会中断(请参阅解释 1 2 ):

Date.now() / 1000 | 0

以毫秒为单位的时间戳(更高精度)

使用 performance.now

var isPerformanceSupported = (
    window.performance &&
    window.performance.now &&
    window.performance.timing &&
    window.performance.timing.navigationStart
);

var timeStampInMs = (
    isPerformanceSupported ?
    window.performance.now() +
    window.performance.timing.navigationStart :
    Date.now()
);

console.log(timeStampInMs, Date.now());
daveb
2008-10-21

我喜欢这个,因为它很小:

+new Date

我也喜欢这个,因为它很短,并且与现代浏览器兼容,并且有超过 500 人投票认为它更好:

Date.now()
xer0x
2011-02-18

JavaScript 使用自纪元以来的毫秒数,而大多数其他语言使用秒数。您可以使用毫秒,但只要您将值传递给 PHP,PHP 本机函数可能会失败。因此,为确保万无一失,我总是使用秒数,而不是毫秒。

这将为您提供 Unix 时间戳(以秒为单位):

var unix = Math.round(+new Date()/1000);

这将为您提供自纪元以来的毫秒数(不是 Unix 时间戳):

var milliseconds = new Date().getTime();
Daithí
2011-05-11