如果我使用Date.parse()
,我是否“几乎可以保证”能够解析我程序中的内容?
在Mozilla's entry for Date.parse中,他们写道:
给定表示时间的字符串,parse()返回时间值。它接受RFC2822 / IETF日期语法(RFC2822第3.3节),例如“周一,1995年12月25日格林尼治标准时间13:30:00”。
我自己的服务器返回Sun, 24 May 2015 05:37:13 GMT
。
麻烦是,Wikipedia tells me that the Date
header follows the RFC 7131。现在,RFC 7231虽然他们似乎在说同样的话(虽然7231更广泛),但我想知道......
如果我使用Date.parse()
,我“几乎可以保证”能够解析我程序中的内容吗?我很高兴地认为服务器没有在时间真空中运行。
答案 0 :(得分:10)
TL; DR如果你回来了一个符合new or old RFC 7231标准的字符串,它会解析大多数现代浏览器,因为它们都非常相似, 疯狂 灵活的解析规则:
new Date('Sun, 24 May 2015 05:37:13 GMT')
new Date('2015 GMT 24 05:37:13 May')
// => Sun May 24 2015 01:37:13 GMT-0400 (EDT)
如果您需要在任何兼容的ECMAScript实施中获得100%保证,则需要使用应用程序代码将时间戳转换为ISO 8601 format: YYYY-MM-DDTHH:mm:ss.sssZ
< / p>
请记住,时区可能会根据用户的位置而改变。
ECMAScript仅为日期指定以下格式:
ECMAScript定义了基于日期时间的字符串交换格式 简化了ISO 8601扩展格式。格式是 如下:
YYYY-MM-DDTHH:mm:ss.sssZ
来源:http://es5.github.io/#x15.9.1.15
关于Date.parse
:
如果String不符合该格式,则该函数可能会掉落 回到任何特定于实现的启发式或 特定于实现的日期格式。
来源:http://es5.github.io/#x15.9.4.2
使用现代浏览器实现,通常适用以下规则:
month/day/year
,month-day-year
短日期January 1 2000
,1 January 2000
,2000 1 January
< / LI>
NaN
或无效的日期错误“Anywhere”真正意味着“任何地方”:你可以混淆组件中的垃圾。以下精神错乱有效,例如......
new Date('PM Jan EST 2015 1 10:00')
new Date('2015 1 10:00 Jan EST PM')
// => Thu Jan 01 2015 10:00:00 GMT-0500 (EST)
...这就是为什么你几乎保证要解析那些日期。
来源: