2013-08-27 81 views
1

我在javascript中創建新的日期對象,並且根據我是否使用dateString參數與年/月/日整數參數來看到一些不一致。創建新的日期對象時的不一致性

下面是一個例子:

var dt1 = new Date(1979,3,5); 
var dt2 = new Date('1979-04-05'); 

jsFiddle with example

DT1被分配值:星期四1979年4月5日00:00:00 GMT-0500(中部夏令時間)

DT2分配值:Wed Apr 04 1979 19:00:00 GMT-0500(中央夏令時間)

有人可以解釋這種行爲嗎?第二個例子(dt2)恰好是Chrome從輸入[type = date]元素返回選定日期的格式,這就是爲什麼我要弄清楚這一點。

+0

看起來像GMT的偏移 – Jonathan

+0

你能解釋爲什麼你甚至期望'新日期('4,5,1979')'以任何特定的方式行事? '4,5,1979'這個字符串甚至沒有格式化爲日期(無論如何我都不能識別格式)。 – NPE

+0

這就是我的想法。這是通過設計,但?爲什麼只有在使用dateString參數時纔會使用偏移量? – joshb

回答

4

它看起來像'1979-04-05'被解釋爲UTC日期(然後在顯示時將UTC日期轉換爲本地時間)。表格new Date(1979,3,5);被解釋爲當地時間。您可以使用Date.UTC強制3參數形式的UTC時間(see docs)。

Date解析(尤其是時區處理)一般不跨瀏覽器一致,而且最好不要依賴於它 - 使用UTC只要有可能,或使用一個單獨的庫像Date.jsmoment.js

相關問題