2013-05-06 83 views
1

我想從服務器的JSON形式的日期時間轉換爲我可以在HighChart中使用,但我不斷收到錯誤的一天。JSON的日期時間JavaScript的日期時間得到了我錯誤的日期

var json = {"lastMinute":"2013-05-06 15:46:00"}; // GMT 

var lastMinute = json.lastMinute; 
var a = lastMinute.split(' '); 
var d = a[0].split('-'); 
var t = a[1].split(':'); 
var date = new Date(d[0],d[1],d[2],t[0],t[1],t[2]); 

// NEED TO CONVERT TO LOCALTIME 

此輸出:週四2013年6月6日15點46分00秒GMT-0700(PDT)

有人可以把我從我的痛苦,告訴我什麼愚蠢的簡單的事情我做錯了嗎?

+2

一個字:[moment.js(http://momentjs.com) – user2246674 2013-05-06 18:02:05

+0

我喜歡moment.js但我們目前正在開發KISS 。 – jbolanos 2013-05-06 18:14:16

+2

我使用了moment.js(和jQuery和..),因爲我相信* [懶惰](http://c2.com/cgi/wiki?LazinessImpatienceHubris)(因此,KISS?)。 KISS的一部分是讓其他人遇到(並解決)你面前的問題。我喜歡使用生成的API來抽象出問題。 – user2246674 2013-05-06 18:49:06

回答

1
在JS

,月從0開始,而不是1 ...

var json = {"lastMinute":"2013-05-06 15:46:00"}; // GMT 

var lastMinute = json.lastMinute; 
var a = lastMinute.split(' '); 
var d = a[0].split('-'); 
var t = a[1].split(':'); 
var date = new Date(d[0],d[1]-1,d[2],t[0],t[1],t[2]); 
+0

應該是'd [1] - 1'嗎? – 2013-05-06 16:07:06

+0

doh!對我感謝,謝謝。更新。 – dandavis 2013-05-06 16:08:30

+0

該死 - 你完全正確,我知道這一點。看 - 我說這簡直太愚蠢了。 – jbolanos 2013-05-06 16:13:04

0

您可以使用Datejs(https://code.google.com/p/datejs/wiki/APIDocumentation)庫。這是非常有用的,你有梅託德parseExact:

Date.parseExact("10/15/2004", "M/d/yyyy"); 
+1

直到Date.js團隊可以[得到](https://groups.google.com/forum/#!msg/datejs/U7W2DtwzMA8/jAx6IvwQZ2oJ)[他們](https://groups.google.com/forum/ #!msg/datejs/vTRd7yDX5Lg/lt5ajP9l3VgJ)[act](https://code.google.com/p/datejs/issues/list)[together](https://code.google.com/p/datejs/源/列表)並生成穩定版本,我不會推薦使用它。他們從2007年起仍然處於「Alpha-1」狀態!改爲嘗試[moment.js](http://momentjs.com/)。 – 2013-05-06 16:39:44

+0

它非常穩定,兩年內未更新。 ;)[link](https://groups.google.com/forum/?fromgroups#!topic/datejs/_teRG_D_Emg)但我同意你,他們必須刪除alpha標籤! – aorlando 2013-05-06 16:49:56

+1

我希望。他們有一些好點子。最後*代碼*簽到是在2008年11月。如果它對你有用 - 沒問題,但是當作者自己沒有信心把它稱爲穩定時,我不會將任何東西投入生產。另一方面,更爲成熟的還有在線單元測試來證明它。 – 2013-05-06 16:53:32

0

對於在JavaScript解析和格式化日期最終,使用moment.js庫。

您可以明確指出UTC,並且在低級瀏覽器中可以正常工作。

var m = moment.utc('2013-05-06 15:46:00'); 

這些數值看起來他們是在ISO8601格式(不T)。所以你應該確定只有上面的代碼。但是,如果你想更加準確,你可以這樣做:

var m = moment.utc('2013-05-06 15:46:00', 'YYYY-MM-DD HH:mm:ss'); 

我推薦你把它作爲一個moment爲儘可能長時間。他們的格式很棒。但是,如果你需要它回爲一個JavaScript的日期,只是做:

var date = m.toDate(); 
+0

json中的日期時間來自數據庫,該數據庫會更新可用數據的最後一分鐘(這是四捨五入的)。我的下一個新任務是使​​用getTimezoneOffset()將其從SERVER GMT轉換爲本地時間 - 這似乎仍然是一個小時。 – jbolanos 2013-05-06 17:03:27

+0

@jbolanos - 注意'getTimezoneOffset'是你可能期望的相反符號。也要注意夏時制的偏移差異。如果你還有一個小時的時間(有或沒有使用momentjs),請更新你原來的問題或者打開一個新的問題,這樣我們可以看到更多的細節。謝謝。 – 2013-05-06 17:50:33

+0

是的 - 我做了一個變量來設置DST的真或假(將手動)和一個如果添加60 getTimezoneOffset()如果是true。 – jbolanos 2013-05-06 18:11:00