2009-08-20 25 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