YYYY-MM-DD與YYYY/MM/DD之錯(cuò)誤時(shí)間戳

嘿,老周,我在后臺(tái)設(shè)置的這個(gè)活動(dòng)是明天零點(diǎn)開始的,你這個(gè)頁面上活動(dòng)開始的倒計(jì)時(shí)怎么多出了8個(gè)小時(shí)?

錯(cuò)因

接口返回的活動(dòng)開始時(shí)間是'2019-06-18',前端需將這個(gè)日期轉(zhuǎn)化為時(shí)間戳來計(jì)算當(dāng)前時(shí)間到該日期的倒計(jì)時(shí),代碼如下:

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

但實(shí)際上正確的時(shí)間戳應(yīng)該是1560787200000,多出了28800000毫秒即8個(gè)小時(shí)!
讓我們來看看是哪里在作妖:

var date = new Date('2019-06-18');
console.log(date); // Tue Jun 18 2019 08:00:00 GMT+0800 (中國標(biāo)準(zhǔn)時(shí)間)

預(yù)期的Tue Jun 18 2019 00:00:00 GMT+0800 (中國標(biāo)準(zhǔn)時(shí)間)變成了Tue Jun 18 2019 08:00:00 GMT+0800 (中國標(biāo)準(zhǔn)時(shí)間)

對(duì)策

將時(shí)間格式從YYYY-MM-DD轉(zhuǎn)為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 (中國標(biāo)準(zhǔn)時(shí)間)

此時(shí)的Date對(duì)象的值便符合預(yù)期了。

知識(shí)延伸

  1. JavaScript中通過Date對(duì)象獲取時(shí)間戳的常用方法:
    • 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'); // 此處本質(zhì)是調(diào)用了valueOf()方法
console.log(timestamp1); // 1560787200000
console.log(timestamp2); // 1560787200000
console.log(timestamp3); // 1560787200000
  1. safari瀏覽器環(huán)境下是不支持YYYY-MM-DD這種格式的
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容