【问题标题】:Which date formats are IETF-compliant RFC 2822 timestamps?哪些日期格式是符合 IETF 的 RFC 2822 时间戳?
【发布时间】:2013-02-01 14:39:37
【问题描述】:

我需要在 JavaScript 中解析日期。格式是

[2 位日]/[2 位月]/[4 位年] [2 位小时(24 模式)]:[2 位分钟]

例如,16/02/2013 21:00

但是如果我做new Date('16/02/2013 21:00').toString(),它会给出'Wed Apr 02 2014 21:00:00 GMT+0200 (Hora de verano romance)'

我猜这是因为我的日期不符合 IETF RFC 2822 日期和时间规范。然后,我应该转换我的字符串,并且我想将它转换为最相似的兼容格式(因为它应该更容易转换)。但是https://www.rfc-editor.org/rfc/rfc2822#page-14很难理解,所以不知道哪种格式最相似。

是否有包含允许格式示例的列表?

【问题讨论】:

  • RFC2822 允许一位数的日值。需要注意的事情。
  • 请注意,从 ECMAScript 2017 开始,ECMA-262 支持 2 种格式进行解析,其他任何格式都取决于实现。格式是为 Date.prototype.toStringtoISOString 指定的格式(ISO 8601 扩展的轻微修改)。实现还必须支持它们为 toLocaleString 生成的任何内容,但格式本身没有指定。另见Why does Date.parse give incorrect results?

标签: javascript date datetime rfc rfc2822


【解决方案1】:

MSDN 有几个有效日期格式的示例:

document.writeln((new Date("2010")).toUTCString()); 

document.writeln((new Date("2010-06")).toUTCString());

document.writeln((new Date("2010-06-09")).toUTCString());

 // Specifies Z, which indicates UTC time.
document.writeln((new Date("2010-06-09T15:20:00Z")).toUTCString());

 // Specifies -07:00 offset, which is equivalent to Pacific Daylight time.
document.writeln((new Date("2010-06-09T15:20:00-07:00")).toGMTString());

// Specifies a non-ISO Long date.
document.writeln((new Date("June 9, 2010")).toUTCString());

// Specifies a non-ISO Long date.
document.writeln((new Date("2010 June 9")).toUTCString());

// Specifies a non-ISO Short date and time.
document.writeln((new Date("6/9/2010 3:20 pm")).toUTCString());

// Output:
// Fri, 1 Jan 2010 00:00:00 UTC
// Tue, 1 Jun 2010 00:00:00 UTC
// Wed, 9 Jun 2010 00:00:00 UTC
// Wed, 9 Jun 2010 15:20:00 UTC
// Wed, 9 Jun 2010 22:20:00 UTC
// Wed, 9 Jun 2010 07:00:00 UTC
// Wed, 9 Jun 2010 07:00:00 UTC
// Wed, 9 Jun 2010 22:20:00 UTC

陷阱

还有一个cross-browser inconsistencies 的矩阵。

参考文献

【讨论】:

    【解决方案2】:

    这个问题似乎是在问“ECMAScript 实现需要解析哪些格式”。

    在 ECMAScript Ed 5 (2011) 之前,解析完全依赖于实现。 ECMAScript 实现需要解析的格式可以概括为:

    1. 在 ECMAScript ed 5 (2011) 中引入的称为“date time string format”的 ISO 8601 扩展格式的单个(尽管略有修改)版本。它与 ISO 8601 的不同之处在于仅日期形式被视为 UTC,而不是本地,并且时区偏移量必须在小时和分钟之间有一个冒号。
    2. 由实现自己的 toString 方法生成的格式,该方法已在 ECMAScript 2018 中标准化
    3. 由实现自己的 toUTCString 方法生成的格式,也在 ECMAScript 2018 中标准化

    任何其他格式的解析仍然依赖于实现并且存在差异,因此一般规则是“不要使用内置解析器”。

    【讨论】:

      猜你喜欢
      • 2012-01-28
      • 2011-03-28
      • 2010-10-27
      • 2014-10-11
      • 2012-12-08
      • 1970-01-01
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多