【问题标题】:what's this date format ? 2006-09-01T07:00:00.000+0000 ? is it ISO_8601 ?这是什么日期格式? 2006-09-01T07:00:00.000+0000 ?是 ISO_8601 吗?
【发布时间】:2015-01-26 21:24:11
【问题描述】:

我正在处理 REST 调用,我需要以“2006-09-01T07:00:00.000+0000”格式发送日期。

用户以 "YYYY/MM/DD" 格式输入日期,我正在使用 "moment.js" 使用这种格式 "YYYY-MM-DDTHH:MM:SS.MMMZ" 来格式化 ISO 8601 中的日期。但它给了我这个输出“1969-06-20T00:06:00.Jun-07:00”。

那么,如何使用 moment.js 或 Javascript 以“2006-09-01T07:00:00.000+0000”格式获取日期?

【问题讨论】:

标签: date-format momentjs iso8601


【解决方案1】:

Yes, it is ISO 86012006-09-01T07:00:00.000+0000 是 2006 年第九个月的第一天,距 UTC 时间 7 小时 0 分钟 0.000 秒,偏移 0 小时。是否允许使用小数取决于交换日期的各方(这是 ISO 说“它是可选的”的一种奇特方式)。

4.2.2.4 小数表示

如果特定应用需要,可以包含小时、分钟或秒的小数部分。如果包含小数部分,则应省略低位时间元素(如果有),小数部分应从整数部分除以 ISO 31-0 中规定的小数符号,即逗号 [,] 或句号 [ .]。其中,逗号是首选符号。如果数的大小小于 1,则按照 3.6 的规定,小数点前面应加上两个零。

交换方应根据应用程序约定小数部分的位数。格式应酌情为 [hhmmss,ss]、[hhmm,mm] 或 [hh,hh](分别为时分秒、时分和小时),并在小数点符号后使用尽可能多的数字。小数部分应至少有一位数字。在下面的例子中,已经同意给最小的时间元素一个带一位数的小数。

(正如@chansen 所指出的,技术上它应该是2006-09-01T07:00:00.000+00:00,时区上有一个分隔符,因为根据 4.3.3(d),每个部分都必须使用基本格式(没有分隔符)或扩展格式(带分隔符),但没有人为此烦恼,strptime 无法生成该格式,您可能会破坏一些 ISO 8601 解析器)。

Javascriptmoment.js 的其他答案中都包含了输出。

Javascript 有Date.toISOString 用于输出。 Date.new 也将接受 ISO 8601 字符串。每个最新的浏览器都应该支持它,尽管 Internet Explorer 仅在版本 9 (IE 8 still represents 5% of desktop users) 中添加了它。

这是moment.js docs on String formattingYYYY-MM-DDTHH:MM:SS.MMMZ 不正确,因为您使用 M 来表示三种不同的事物。你要的是YYYY-MM-DDTHH:mm:ss.SSSZZ

  • YYYY - 年
  • MM - 月份数(2 位)
  • DD - 日期(2 位数)
  • HH - 小时(2 位,24 小时格式)
  • mm - 分钟(2 位)
  • ss - 秒(2 位)
  • SSS - 数千秒
  • ZZ - UTC 偏移量

【讨论】:

  • 实际上,这是一个无效的 ISO 8601 表示。当日期和时间为扩展格式时,区域指示符不能为基本格式。
  • @chansen 4.3.3(d),就是这样。您在技术上是正确的(最好的正确)!我认为这在实践中并不重要,每个人都搞砸了。我认为你甚至不能让 strptime 用分隔符输出时区。
【解决方案2】:

在 2006-09-01T07:00:00.000+0000 对我有用的格式

原为:yyyy-MM-dd'T'hh:mm:ss.sssZ

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-22
    • 2017-01-27
    • 1970-01-01
    相关资源
    最近更新 更多