我遇到了一个看起来很奇怪的Firefox结果。使用以下格式:
2013/01/01 00:00:00-0000
对于我的约会,当时区变成"正"时,我遇到了一个问题。例如,new Date('2013/01/01 05:00:00-0000')
Date { Tue Jan 01 2013 00:00:00 GMT-0500 (EST) }
。
new Date('2013/01/01 05:00:00+0100')
Date { Invalid Date }
我希望得到:
日期{Mon Dec 31 2012 23:00:00 GMT-0500 (EST)}
看起来+
是导致问题的原因,如果我不能使用GMT以东的时区,这似乎是一个相当大的问题。
编辑:添加http://jsfiddle.net/utm4f/
在Firefox中运行,它将返回一个无效的日期(我在OS X 10.8.3上运行Firefox 20)
好吧,我通过投掷我能找到的问题。显然,Firefox需要在时间和时区之间留出一个空格。
new Date('2013/01/01 05:00:00 +0100')
new Date('2013/01/01 05:00:00 -0100')
如果没有空格,-
时区不会出错,但+
时区会出错。
您可能希望使用ISO8601值,例如:
2013-12-31T01:23:45-07:00
解析ISO日期将在所有较新的浏览器上工作,但在一些旧的浏览器上失败,最明显的是IE8。这里有一个很好的描述浏览器对此的支持,以及一个旧浏览器支持的shim。
但是如果你真的想支持所有不同浏览器的不一致性,最好的方法(依我之见)是使用moment.js。
var m = moment('2013-12-31T01:23:45-07:00');
或者甚至使用其他格式,带有显式解析字符串:
var m = moment('2013/01/01 00:00:00-0000', 'YYYY/MM/DD HH:mm:ssZZ');