乐趣区

YYYYMMDD与YYYYMMDD之错误时间戳

嘿,老周,我在后台设置的这个活动是明天零点开始的,你这个页面上活动开始的倒计时怎么多出了 8 个小时?

错因

接口返回的活动开始时间是'2019-06-18',前端需将这个日期转化为时间戳来计算当前时间到该日期的倒计时,代码如下:

var timestamp = new Date('2019-06-18').getTime();
console.log(timestamp); // 1560816000000

但实际上正确的时间戳应该是 1560787200000,多出了28800000 毫秒即 8 个小时!
让我们来看看是哪里在作妖:

var date = new Date('2019-06-18');
console.log(date); // Tue Jun 18 2019 08:00:00 GMT+0800 (中国标准时间)

预期的 Tue Jun 18 2019 00:00:00 GMT+0800 (中国标准时间) 变成了Tue Jun 18 2019 08:00:00 GMT+0800 (中国标准时间)

对策

将时间格式从 YYYY-MM-DD 转为YYYY/MM/DD:

var dateStr = '2019-06-18';
dateStr = dateStr.replace(new RegExp(/-/gm), "/");
console.log(dateStr); // '2019/06/18'
var date = new Date(dateStr);
console.log(date); // Tue Jun 18 2019 00:00:00 GMT+0800 (中国标准时间)

此时的 Date 对象的值便符合预期了。

知识延伸

1.JavaScript 中通过 Date 对象获取时间戳的常用方法:

  • getTime()
  • valueOf()
var timestamp1 = new Date('2019/06/18').getTime();
var timestamp2 = new Date('2019/06/18').valueOf();
var timestamp3 = +new Date('2019/06/18'); // 此处本质是调用了 valueOf()方法
console.log(timestamp1); // 1560787200000
console.log(timestamp2); // 1560787200000
console.log(timestamp3); // 1560787200000

2.safari 浏览器环境下是不支持 YYYY-MM-DD 这种格式的

退出移动版