JavaScript Date.parse裡的坑
在做 FreeCodeCamp 的一個練習,題目要求能夠接收使用者輸入的時間引數,返回一個 json 檔案,包括 unix 時間戳和自然語言的表示。
使用示例:
https://timestamp-ms.herokuapp.com/December%2015,%202015
https://timestamp-ms.herokuapp.com/1450137600
輸出示例:
{ "unix": 1450137600, "natural": "December 15, 2015" }
查詢 Date 函式發現建構函式既可以接收時間戳為引數,也可以接收自然語言的字串。
> 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
的文件裡發現了這麼一段:
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.
如果輸入的是字串作為建構函式,且沒有指定時區的話,會預設用當地時區,而 JavaScript 並沒有提供指定時區的方法,於是只能曲線救國,先轉成時間戳,把偏差的時間加上,再轉回 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)
相關文章
- JavaScript Date.parse()JavaScript
- Javascript裡instanceo的坑JavaScript
- Python裡的那些坑Python
- Laravel裡的那些坑 - OptionalLaravel
- JavaScript 操作 DOM 的那些坑JavaScript
- JavaScript裡的函式JavaScript函式
- javascript 填坑史JavaScript
- JavaScript 新手的踩坑日記JavaScript
- JavaScript 裡的 Promise ChainingJavaScriptPromiseAI
- JavaScript裡的依賴注入JavaScript依賴注入
- 在這裡佔個坑
- MVC Json方法裡的一個坑MVCJSON
- JavaScript正則爬坑JavaScript
- JavaScript 有個 Unicode 的天坑JavaScriptUnicode
- JavaScript四捨五入的那些坑JavaScript
- JavaScript 裡三個點 ... 的用法JavaScript
- javascript對深拷貝物件的研坑JavaScript物件
- JavaScript深拷貝的一些坑JavaScript
- JavaScript設計模式入坑JavaScript設計模式
- 曾經面試踩過的坑,都在這裡了~面試
- JavaScript陣列裡的slice和spliceJavaScript陣列
- javascript裡的document.all用法收集JavaScript
- javascript控制html裡的元素樣式JavaScriptHTML
- 沒想到Swift裡KVC還能有坑Swift
- 沒想到 Swift 裡 KVC 還能有坑Swift
- javascript ==與!=的比較規則(加踩坑)JavaScript
- ElasticSearch裡面一些小坑筆記Elasticsearch筆記
- nodejs request module裡的json引數的一個坑NodeJSJSON
- JavaScript中this的執行機制及爬坑指南JavaScript
- JavaScript 中 this 的執行機制及爬坑指南JavaScript
- 支付寶是如何在年賬單裡坑你的?
- js基礎–Date.parse()與Date.getTime()方法詳解JS
- JavaScript作用域面試題避坑指南JavaScript面試題
- JavaScript兩數相加(踩坑)記錄JavaScript
- JavaScript之坑我--陣列原理探析JavaScript陣列
- JavaScript 踩坑心得— 為了高速(上)JavaScript
- ABAP,Java,JavaScript裡的字串模板String TemplateJavaScript字串
- JavaScript 在 Promise.then 方法裡返回新的 PromiseJavaScriptPromise