2013-10-26 67 views
0
xdate: 2013-10-26 = 
Fri Oct 25 2013 20:00:00 GMT-0400 (Eastern Daylight Time) 

xdate: Oct 26, 2013 = 
Sat Oct 26 2013 00:00:00 GMT-0400 (Eastern Daylight Time) 

xdate: 10/26/2013 = 
Sat Oct 26 2013 00:00:00 GMT-0400 (Eastern Daylight Time) 

xdate: Oct. 26, 2013 = 
Sat Oct 26 2013 00:00:00 GMT-0400 (Eastern Daylight Time) 

當我使用新的日期(xdate)與上面的字符串在JavaScript中創建一個日期,他們似乎都工作除外,其散發出來YYYY-MM-DD罰款到前一天晚上8點。不幸的是,這是由HTML5 type = date創建的格式。任何具有該字符串的方法也會創建一個正常的日期。的Javascript新的日期出來與晚上8點前一天

我想我的問題是更多:爲什麼一個格式創建一個4小時的日期。我使用2013-10-26創建了一個日期,然後做了getDate並獲得了第25個。這似乎是錯誤的!

回答

1

出來到晚上8點的前一天晚上

不,你的日期時間沒有出來之前到晚上8點了一夜。注意你創建的日期是UTC日期。 您看到的原因是因爲您的本地時區在UTC(GMT-4)之前4小時。這只是根據當地時區計算日期的呈現,在內部,日期時間,因爲01/01/1970 00:00:00 UTC通過毫秒數表示

您可以使用Date.getTime()獲得日期的內部表示,這將在所有時區返回相同的值。例如,對於:

var date = new Date("2013-10-26"); 
  • 當你的本地時區是GMT-4:您將看到的介紹是:Fri Oct 25 2013 20:00:00 GMT-0400

  • 當你的本地時區爲GMT + 7。你會看到:Sat Oct 26 2013 07:00:00 GMT+0700

date.getTime()回報相同的值。這是你應該關心的價值。

0

您可以創建自己的數據是這樣,避免這個問題timeone offset

xdate = '2013-10-26'; 
var date = new Date(xdate.replace(/-/g, ',')); 

測試:在日期值d1d2之間

var d1 = new Date(xdate); // Fri Oct 25 2013 20:00:00 GMT-0400 (EDT) 

var d2 = new Date(xdate.replace(/-/g, ',')); // Sat Oct 26 2013 00:00:00 GMT-0400 (EDT) 

通知差異。

d2顯出Oct 26 2013因爲這-,替換的正確的值。

+0

這將創建與UTC中創建日期相同的結果http://jsfiddle.net/gURGG/。試試你當地的時區。 –

+0

@KhanhTO:我在上面添加了**測試**部分,以便您可以看到2個輸出之間的差異。 – anubhava

+0

@KhanhTO:你的[jsfiddle](http://jsfiddle.net/gURGG/1/)也顯示2個不同的日期。第一個替換是:'週六2013年10月26日00:00:00格林威治標準時間-0400(美國東部時間)'但第二與默認是:'週五2013年10月25日20:00:00 GMT-0400(EDT)'驗證我的結果。 – anubhava

相關問題