JavaScript 获取时间戳

说明

在使用 js 时,经常会有获取时间戳的操作。

可以使用下面的几个方法,获取 13 位的时间戳。

performance.timeOrigin + performance.now()
Date.now()
new Date().getTime()
new Date().valueOf()
Date.parse(new Date())

执行输出:

console.log('performance.timeOrigin + performance.now() ====> ', performance.timeOrigin + performance.now());
console.log('Date.now() ====> ', Date.now());
console.log('new Date().getTime() ====> ', new Date().getTime());
console.log('new Date().valueOf() ====> ', new Date().valueOf());
console.log('Date.parse(new Date()) ====> ', Date.parse(new Date()));
image.png

注意点

时间戳

13位的时间戳,其精度是毫秒(ms)
10位的时间戳,其精度是秒(s)
13位数的时间戳转化为10位数的时间戳 ,除以1000
10位数的时间戳转化为13位数的时间戳 ,乘以1000

13位整数时间戳

使用 performance.timeOrigin + performance.now() 获取的时间戳,带有小数点,但是不能使用 >>0 运算,进行取整。
因为对于整数部分为10位的时间戳,通过位运算可以进行取整(因为目前时间戳1801075039<2147483647),不存在时间戳超过范围的问题。

但是对于13位时间戳,例如 1659658451294>2147483647,此时再通过位运算操作的时候就会导致异常。
这主要是因为在进行位运算之前,JS会先将64bit的浮点数1596615447015.01转为32bit的有符号整型后进行运算。

在 js 中,13位的时间戳超过了整数取值的最大范围(32bit)。

为了验证上述过程,我们再举一个例子:1590015447015.123 >> 0 = 877547495
1590015447015.123的二进制表示为:10111001000110100010011100100111111100111.000111111
舍去其小数部分后,从后往前取32位为:00110100010011100100111111100111
最高位为0,正数,直接转为10进制为:877547495
因此,带有小数点的13位时间戳不能使用位移运算进行取整。

10 位整数时间戳

获取到 13 位整数时间戳除以 1000 即可。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容