2013-09-01 73 views
0

我從一個Ajax請求,看起來像下面這樣得到一個日期值回:爲什麼Javascript更改我的日期?

"2013-08-08T00:00:00" 

嗯,這已經不是什麼好,所以我分析只是日期:

mydate = mydate.substring(0,10); 

這給了我:

"2013-08-08" 

太好了,現在我只是做一個真正的日期:

mydate = new Date(mydate.substring(0,10)) 

並獲得:

Wed Aug 07 2013 20:00:00 GMT-0400 (Eastern Daylight Time) 

咦?爲什麼我有一天失去了?

+2

你碰巧知道什麼時區是?而且你一個月沒有失散。那是八月,它仍然是八月。 – ZenMaster

+0

我的本地機器開啓時間(UTC-05:00)東部時間(美國和加拿大) – Coltech

+2

這可能會轉化爲GMT-0400而夏令時未被應用。 – ZenMaster

回答

2

您在這裏有一個有趣的情況確實,這是由創建Date對象時引起的,除非您指定時區偏移量,否則它會假定您的日期輸入爲UTC時間,然後將其轉換。這僅僅是因爲你與輸入的值「 - 」而不是「/」

編輯:更正,我相信你的日期可能會採取爲UTC時間,然後轉換成適當的EDT時間。這可以解釋爲什麼設置精確值或使用'/'返回不同的結果。 '/'可能表示EDT時間,而' - '表示UTC時間。

參見:

var asString = "2013-08-08T00:00:00" var mydate = 
asString.substring(0,10); 

var cDate1 = new Date(mydate); 

var cDate2 = new Date(mydate.replace('-', '/')); 

var asSplit = mydate.split('-'); 
var cDate3 = new Date(asSplit); 

alert(cDate1 + "\n" + cDate2 + "\n" + cDate3); 

將會產生如下:

Wed Aug 07 2013 20:00:00 GMT-0400 (Eastern Daylight Time) 
Thu Aug 08 2013 00:00:00 GMT-0400 (Eastern Daylight Time) 
Thu Aug 08 2013 00:00:00 GMT-0400 (Eastern Daylight Time) 

當情況是:

  • 標準
  • 替換 ' - ' 與 '/'
  • 分成年/月/日

你可以看到它在行動here

編輯:注意到一個錯誤的loxxy

+0

GMT與UTC相同。 –

+0

糟糕。這意味着EDT不是GMT – jrbeverly

0

指出,這應該工作:

new Date("2013-08-08".split("-")) 

所以在你的情況下:

new Date(mydate.substring(0,10).split("-")) 
相關問題