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


当前回答

我在这个答案中提供了多种解决方案和描述。如果有任何不清楚的地方,请随时提问


快速和肮脏的解决方案:

Date.now() /1000 |0

警告:如果您使用|0魔法,它可能会在2038年中断并返回负数。此时改用Math.floor()

Math.floor()解决方案:

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

德里克的书呆子替代品朕會功夫 摘自以下评论:

new Date/1e3|0

Polyfill以获取Date.now()工作:

要使其在IE中工作,您可以执行以下操作(MDN的Polyfill):

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

如果您不关心年份/星期几/夏时制,您需要记住2038年之后的日期:

按位操作将导致使用32位整数而不是64位浮点。

您需要将其正确使用为:

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

如果您只想知道从代码第一次运行时起的相对时间,可以使用以下内容:

const relativeTime = (() => {
    const start = Date.now();
    return () => Date.now() - start;
})();

在使用jQuery的情况下,可以使用$.now(),如jQuery的Docs中所述,这会使polyfill过时,因为$.now()在内部执行相同的操作:(newDate).getTime()

如果您对jQuery的版本感到满意,请考虑放弃这个答案,因为我自己没有找到它。


现在对|0的作用做一个小小的解释:

通过提供|,您可以告诉解释器执行二进制OR运算。位操作需要将Date.now()/1000的十进制结果转换为整数的绝对数。

在转换过程中,小数被删除,结果与使用Math.floor()输出的结果类似。

不过,请注意:它会将64位的双精度转换为32位的整数。这将导致处理大量数据时信息丢失。2038年后,由于32位整数溢出,时间戳将中断,除非Javascript在严格模式下移动到64位整数。


有关Date.now的更多信息,请点击以下链接:Date.now()@MDN

其他回答

时间戳(毫秒)

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

Date.now()

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

+ new Date()

或者,直接调用valueOf:

new Date().valueOf()

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

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=(窗口.性能&&窗口.性能.当前&&窗口.性能.计时&&窗口.性能.计时.导航开始);var timeStampInMs=(是否支持性能?window.performance.now()+窗口.性能.计时.导航开始:日期.now());console.log(timeStampInMs,Date.now());

JavaScript的工作时间是从纪元开始的毫秒数,而大多数其他语言的工作时间都是秒。您可以使用毫秒来工作,但只要您传递一个值来表示PHP,PHP本机函数可能就会失败。所以,为了确保我总是使用秒,而不是毫秒。

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

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

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

var milliseconds = new Date().getTime();

日期,JavaScript中的原生对象是我们获取所有时间数据的方式。

在JavaScript中要小心,时间戳取决于客户端计算机设置,因此它不是100%准确的时间戳。要获得最佳结果,需要从服务器端获取时间戳。

总之,我更喜欢用香草。这是在JavaScript中实现的常见方法:

Date.now(); //return 1495255666921

在MDN中,如下所述:

Date.now()方法返回自1970年1月1日00:00:00 UTC。因为now()是Date的静态方法,所以您总是将其用作Date.now()。

如果您使用的版本低于ES5,Date.now();不起作用,您需要使用:

new Date().getTime();

如果用于日志记录,则可以使用ISOString

new Date().toISOString()

“2019-05-18T20:02:36.694Z”

在JavaScript中获取时间戳

在JavaScript中,时间戳是自1970年1月1日以来经过的毫秒数。如果您不打算支持<IE8,可以使用

new Date().getTime(); + new Date(); and Date.now();

直接获取时间戳,而无需创建新的Date对象。

返回所需的时间戳

new Date("11/01/2018").getTime()