- Published on
在JavaScript中获取时间戳的方法
- Authors
- Name
本文提供多种解决方案和描述,如果有任何不清楚的地方,请随时提问。
快速简便的解决方案
;(Date.now() / 1000) | 0
警告: 这种方式可能会在2038年出现问题并返回负数。如果到那时仍需使用,请改用
Math.floor()
。
Math.floor()
的解决方案
使用Math.floor(Date.now() / 1000)
Derek 朕會功夫 提供的另类方案
由;(new Date() / 1e3) | 0
Date.now()
在IE中运行
使用Polyfill使在IE中,你可以使用以下Polyfill(来自MDN):
if (!Date.now) {
Date.now = function now() {
return new Date().getTime()
}
}
关于2038年的日期处理建议
如果你不在乎年份/星期/夏令时方面的问题,需要注意Bitwise操作导致的32位整数使用,而不是64位浮点数。可以如下使用:
Math.floor(Date.now() / 1000)
获取相对时间的代码示例
如果你只想知道代码第一次运行后的相对时间,可以使用如下代码:
const relativeTime = (() => {
const start = Date.now()
return () => Date.now() - start
})()
使用jQuery获取时间戳
如果你使用jQuery,可以使用$.now()
,详见jQuery文档。这使得Polyfill不再需要,因为$.now()
内部其实执行的是(new Date).getTime()
。
如果你对jQuery的版本感到满意,可以考虑给这个答案点赞,因为不是我最初找到这个方法的。
|0
的作用
解释使用|
运算符时,你告诉解释器进行二进制或操作。
位运算需要绝对数值,这会将Date.now() / 1000
的结果转换成整数。
在该转换过程中,小数被移除,结果类似于使用Math.floor()
的输出。
警告: 这会将64位双精度数转换为32位整数。
这在处理大数时会导致信息丢失。
在2038年后,由于32位整数溢出,时间戳将失效,除非JavaScript在Strict模式下改用64位整数。
Date.now
的信息
更多关于请访问这篇文章:Date.now()
@ MDN