[JS基础回顾] 时间Date 与 时间戳

724 阅读4分钟

目录

  1. new Date() * 1 与 new Date()
  2. 获取13位毫秒时间戳的多个方法
  3. 获得10位的时间戳
  4. 时间戳转换为时间对象
  5. Unix时间戳
  6. 参考
  7. 总结

一 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 位的时间戳,大致思路有两个:

  1. 截取前 10 位
  2. 除以 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位基本不会出现此问题.