“2011-01-27T04:59:00Z”形式的日期字符串 - 有些浏览器接受它们,有些浏览器不接受。为什么?

时间:2011-01-26 16:50:42

标签: javascript date

我从Web服务调用中获取"2011-01-27T04:59:00Z"形式的日期字符串。 Firefox和Chrome使用var d = new Date("2011-01-27T04:59:00Z")解析字符串没有问题,但Safari和IE不会代表它。

我可以自己解析字符串并将其提供给Date.parse()Date.UTC(),但我想知道为什么(1)浏览器中存在像Date对象这样基本的东西,并且(2)为什么公共API会以Safari和(特别是)IE拒绝的格式返回日期字符串。

1 个答案:

答案 0 :(得分:3)

对于你们两个问题,我会说

  1. 这是来自浏览器前战争I的遗物.ECMAScript规范写得不好,浏览器支持他们(不想)想要的任何内容。
  2. 它是ISO 8601格式,是在Javascript Date对象之后发明的。即使在PHP中它也是在PHP 5.0之后添加的。日期对象是采用RFC 2822格式的原始设计。
  3. 每条评论的更正:

    1. Date.prototype.parse的引入没有说明它应该支持的日期格式的规范。即使它在ECMAScript 3中标准化,规范也没有定义它应该支持的日期格式。在2009年12月,ECMAScript 5定义Date应支持问题中指定的ISO 8601格式,但对于已发布的版本,在撰写本文时,只有Gecko / Firefox实现了该功能。 (Webkit已在我的测试中实现了夜间版本)
    2. 由于未知原因,尽管ISO 8601是在1988年编写的,但直到最近,网络协议/编程语言才开始支持该格式。 PHP仅在版本5之后支持date()函数中的格式。在Internet开始时,协议用于花费时间的RFC 822/2822格式,这对于英语用户来说是人类可读的。
    3. 在我看来,API应该使用Unix时间来描述时间,如果它只是打算用于机器。