2016-01-12 100 views
2

我有一個場景,我正在使用AngularJS來讀取日期。有趣的是,它將我的日期值減1。Javascript新日期減少日期一天

這是怎麼發生的?

new Date("2016-01-06T00:00:00") 
give me result as 
Tue Jan 05 2016 16:00:00 GMT-0800 (Pacific Standard Time) 
+4

非常簡單...第一個日期字符串是UTC,你的時區偏移距離午夜8小時 – charlietfl

+1

正如上面所述,你需要調整你的時區 – AGE

+1

['Date.parse'](https:// developer .mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse) – Andreas

回答

3

這是因爲當你在JavaScript中使用的new Date(),將其轉換並打印在瀏覽器中時區的日期。

因此,如果您打印:

new Date("2016-01-06T00:00:00-0800") 

你會得到,因爲你的時區(取決於瀏覽器)和UTC時間之間的差異-0800你想要的實際輸出。

2

UTC時區來解釋ISO 8601格式的論點,即不包含時區信息(注意,ECMAScript的2015年規定,如果沒有一個時區的日期時間字符串爲當地的對待,而不是UTC) 。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

由於您的日期字符串顯得缺乏一個,JS假設是UTC時間。你看到的結果是相同的時刻,抵消你的時區。您所需要做的就是將時區數據提供給您正在解析的字符串。

2

這是因爲日期正在考慮您的瀏覽器的時區帳戶,在您的情況是在PST。它同樣對我來說,在EST:

test = new Date("2016-01-06T00:00:00") 

星期二2016年1月5日19:00:00 GMT-0500(EST)

您仍然可以通過使用獲得時間在UTC任何的.getUTC*功能,像這樣:

test.getUTCDate();