- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
目录
- new Date() * 1 与 new Date()
获取13位毫秒时间戳的多个方法获得10位的时间戳时间戳转换为时间对象- Unix时间戳
- 参考
- 总结
一 new Date() * 1
获取13位时间戳
new Date() * 1;
// 1634539458225
new Date().getTime();
// 1634539701256
new Date();
// Mon Oct 18 2021 14:44:14 GMT+0800 (中国标准时间)
二 获取13位毫秒时间戳的多个方法
var dtObj = new Date("2021-10-17 23:59:59.999");
dtObj.getTime(); // 1634486399999
dtObj.valueOf(); // 1634486399999
Number(dtObj); // 1634486399999
+dtObj; // 1634486399999
Date.parse(dtObj); //1634486399000
把时间对象转换为时间戳
ew Date().getTime(); // 方法1
new Date().valueOf(); // 方法2
Date.parse(new Date()); // 方法3
Number(new Date()); // 方法4
+new Date(); // 方法5
三 获得10位的时间戳
在 JavaScript 中,通过时间
对象转换得到的时间戳都是 13 位的,但有时候我们也需要精确到秒的 10 位时间戳,比如微信支付用的就是 10 位的时间戳。要在 JS 获得 10 位的时间戳,大致思路有两个:
- 截取前 10 位
- 除以 1000 取整
// 将 13 位时间戳转换为字符串截取前 10 位,得到 10 位时间戳字符串
(+new Date()).toString().substring(0,10); // '1634541985' 截取第 0~9 位
(+new Date()).toString().substr(0,10); // '1634541997' 从第 0 位开始截取 10 位
parseInt(+new Date()/1000)
// 1634541940
四 时间戳转换为时间对象
在 JavaScript 中,时间戳转时间对象的方法非常简单,直接将一个时间戳做为
Date的参数即可
(+new Date);
//1634542154357
new Date(1634542154357);
//Mon Oct 18 2021 15:29:14 GMT+0800 (中国标准时间)
new Date(1634542154357).toLocaleString();
// '2021/10/18 下午3:29:14'
new Date(1634542154357).toLocaleDateString();
// '2021/10/18'
new Date(1634542154357).toLocaleTimeString();
// '下午3:29:14'
五 Unix时间戳
Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。
Unix时间戳不仅被使用在Unix系统、类Unix系统中,也在许多其他操作系统中被广泛采用。
如果操作系统使用32位二进制数字表示时间。此类系统的Unix时间戳最多可以使用到格林威治时间2038年01月19日03时14分07秒(二进制:01111111 11111111 11111111 11111111)。其后一秒,二进制数字会变为10000000 00000000 00000000 00000000,
发生溢出错误,造成系统将时间误解为1901年12月13日20时45分52秒。这很可能会引起软件故障,甚至是系统瘫痪。使用64位二进制数字表示时间的系统(最多可以使用到格林威治时间292,277,026,596年12月04日15时30分08秒)则基本不会遇到这类溢出问题。
参考
总结
Unix时间戳不仅被使用在Unix系统、类Unix系统中,也在许多其他操作系统中被广泛采用- 32位操作系统二进制数字表示时间,会出现软件故障问题. 64位基本不会出现此问题.