JavaScript Date.parse里的坑

在做 FreeCodeCamp 的一個練習(xí),題目要求能夠接收用戶輸入的時間參數(shù),返回一個 json 文件,包括 unix 時間戳和自然語言的表示。

使用示例:
https://timestamp-ms.herokuapp.com/December%2015,%202015
https://timestamp-ms.herokuapp.com/1450137600

輸出示例:
{ "unix": 1450137600, "natural": "December 15, 2015" }

查詢 Date 函數(shù)發(fā)現(xiàn)構(gòu)造函數(shù)既可以接收時間戳為參數(shù),也可以接收自然語言的字符串。

> new Date('December 15, 2015')
Tue Dec 15 2015 00:00:00 GMT+0800 (CST)
> new Date(1450137600*1000)
Tue Dec 15 2015 08:00:00 GMT+0800 (CST)

然而他們得到的時間卻相差了8個小時,查了下,在 Date.parse 的文檔里發(fā)現(xiàn)了這么一段:

Given a string representing a time, parse()
returns the time value. It accepts the RFC2822 / IETF date syntax (RFC2822 Section 3.3), e.g. "Mon, 25 Dec 1995 13:30:00 GMT"
. It understands the continental US time zone abbreviations, but for general use, use a time zone offset, for example, "Mon, 25 Dec 1995 13:30:00 +0430"
(4 hours, 30 minutes east of the Greenwich meridian). If a time zone is not specified and the string is in an ISO format recognized by ES5, UTC is assumed. However, in ECMAScript 2015 ISO format dates without a timezone are treated as local.

如果輸入的是字符串作為構(gòu)造函數(shù),且沒有指定時區(qū)的話,會默認(rèn)用當(dāng)?shù)貢r區(qū),而 JavaScript 并沒有提供指定時區(qū)的方法,于是只能曲線救國,先轉(zhuǎn)成時間戳,把偏差的時間加上,再轉(zhuǎn)回 Date 對象。

> d = new Date('December 15, 2015')
Tue Dec 15 2015 00:00:00 GMT+0800 (CST)
> d1 = new Date(1450137600*1000)
Tue Dec 15 2015 08:00:00 GMT+0800 (CST)
> d = new Date(d.getTime()-1000*60*d.getTimezoneOffset())
Tue Dec 15 2015 08:00:00 GMT+0800 (CST)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,993評論 19 139
  • 一直被各種時間格式困擾,所以這次來總結(jié)一下常用的時間格式到底有哪些,它們之間如何互相轉(zhuǎn)換。 ISO Date "...
    吃檸檬的刺猬閱讀 11,193評論 0 3
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,186評論 6 13
  • 我喜歡你是活潑的 大聲地唱情歌 大口地吃東西 大方地買衣服 不顧焦慮地貪玩 這時的你怎么了 悶著,坐在床上思考十七...
    倩何人換取閱讀 281評論 0 3
  • 晚上在簡書上看了一篇我認(rèn)為比較好的文章,便推薦給lg看。我的目的很明確,希望他看了這篇文章后能拾起筆重新開始寫作,...
    明月書心堂閱讀 406評論 2 3