2009-08-20 51 views
2

我正在嘗試讓JavaScript爲我解析日期和時間格式,最終目的是告訴我自該日期以來的日期和現在的時間(本地)。JavaScript不會解析GMT日期/時間格式

不幸的是,我必須使用的日期格式(它來自我無法控制的JSON響應)在2008-10-01 06:21:43類型格式中返回。

var thedate = "2008-10-01 06:21:43"; 
var inmillisecs = new Date(thedate); 

這只是從JavaScript返回一個錯誤,告訴我日期無效。

我該如何解決這個問題?

+0

不應該新日期的參數是日期嗎? – Guilherme 2009-08-20 20:51:07

+0

複製並粘貼錯誤 – jakeisonline 2009-08-20 20:52:02

回答

2

預期的格式是美國格式:m/d/yyyy hh:mm:ss

var date1 = new Date("2008-10-01 06:21:43"); //fails 
var date2 = new Date("10/1/2008 06:21:43"); //works correctly 
+0

感謝澄清此Kip - 不幸的是,如上所述,我無法控制格式,因爲它來自通過JSON的API。 我想我唯一的選擇是正則表達式替換一切,woopee。 – jakeisonline 2009-08-20 20:56:26

+0

@Jake:這個答案可能會幫助你:http://stackoverflow.com/questions/1274743/how-can-i-determine-a-timezone-by-the-utc-offset/1274752#1274752 – Kip 2009-08-20 20:58:21

+1

不幸的是,沒有,規範甚至沒有具體。所有它基本上說是新的日期(字符串)應該能夠解析任何someDate.toString()吐出,這是依賴於實現。 http://www.ecma-international.org/publications/standards/Ecma-262。htm – 2009-08-20 20:58:46

0

正確的語法應爲:

 
    var thedate = "Oct 1, 2008 06:21:43"; 
    var inmillisecs = new Date(thedate); 

你必須採取一些措施來改變你接收到的格式字符串我展示出。使用美式格式也可以運行

 
    var thedate = "10/1/2008 06:21:42"; 
    var inmillisecs = new Date(thedate); 
1

這是一個ISO 9601的日期 - 他們是一個很好的標準的工作。嘗試使用正則表達式只是改寫(munging)它:

(\d{4})-(\d{2})-(\d{2})[ tT](.*) 

\2/\3/\1 \4 
8

這應該這樣做

function dateFromUTC(dateAsString, ymdDelimiter) 
{ 
    var pattern = new RegExp("(\\d{4})" + ymdDelimiter + "(\\d{2})" + ymdDelimiter + "(\\d{2}) (\\d{2}):(\\d{2}):(\\d{2})"); 
    var parts = dateAsString.match(pattern); 

    return new Date(Date.UTC(
     parseInt(parts[1]) 
    , parseInt(parts[2], 10) - 1 
    , parseInt(parts[3], 10) 
    , parseInt(parts[4], 10) 
    , parseInt(parts[5], 10) 
    , parseInt(parts[6], 10) 
    , 0 
)); 
} 

alert(dateFromUTC("2008-10-01 06:21:43", '-')); 
+0

像魅力一樣工作 – 2012-04-10 01:36:37

+1

謝謝...這是一個很好的開始!我想本地(而不是UTC)時間,所以我最終將零件[5]行更改爲:「\t,parseInt(parts [5],10) - new Date()。getTimezoneOffset()」。有注意事項,但我願意和他們一起生活......見:http://stackoverflow.com/questions/2263705/display-local-time-from-utc-time-stored-in-sql-database- on-asp-net-app – GroovyCakes 2012-05-20 17:03:25

3

有這個好看庫調用DateJS。我沒有經驗,但您可能會覺得它很有用。我想你會對parse()和/或parseExact()特別感興趣。

我最初聽說過它從this SO post

乾杯。

編輯:我只注意到你的時候提到,我不知道DateJS處理時間,所以我要去看看,真正的快,否則你可以忽略這個帖子:)

+0

DateJS看起來並不像它正在開發的那樣(最後一次更新是在2008年)。相反,請嘗試http://momentjs.com/ – ajbeaven 2013-01-21 03:17:47