我想从DateTimePHP 8.2 中的对象生成 ISO-8601 字符串。该类Date有两个相关的函数预定义常量date_format():
DATE_ISO8601-"Y-m-d\\TH:i:sO"
注意:此格式与 ISO-8601 不兼容,但出于向后兼容性的原因保留这种格式。请改用 DateTimeInterface::ISO8601_EXPANDED、DateTimeInterface::ATOM 来与 ISO-8601 兼容。(参考 ISO8601:2004 第 4.3.3 条 d 款)
DATE_ISO8601_EXPANDED-"X-m-d\\TH:i:sP"
此格式通过始终包含符号字符,允许超出 ISO-8601 正常范围 0000-9999 的年份范围。它还指出该时区部分 (+01:00) 与 ISO-8601 兼容。
该DATE_ISO8601_EXPANDED格式向字符串添加一个前导+字符,其他语言(特别是 Swift)中的 ISO8601 解析器无法识别该字符:
+2023-03-29T05:54:21+00:00
Run Code Online (Sandbox Code Playgroud)
的输出DATE_ISO8601是:
2023-03-29T05:54:21+0000
Run Code Online (Sandbox Code Playgroud)
我无法确定警告的DATE_ISO8601含义。是不是意味着:
或者
有趣的是,ISO 8601 第 4 节如果不购买就无法公开获取,所以我无法阅读它。但“扩展”格式似乎也不是标准 ISO8601,因为该规范+仅在年份大于 9999 时才要求使用前导符号。
该注释意味着该格式DATE_ISO8601与 ISO-8601 根本不兼容,您不应使用它,而应使用DATE_ISO8601_EXPANDED或DATE_ATOM。兼容性问题与是否使用年份超出 0000-9999 的日期无关。您可以在这里阅读更多相关内容。
格式仅在年份表示上DATE_ISO8601_EXPANDED有所不同,使用而不是:DATE_ATOMDATE_ISO8601_EXPANDED'X''Y'
"Y-m-d\\TH:i:sP"
"X-m-d\\TH:i:sP"
Run Code Online (Sandbox Code Playgroud)
因此,如果您不需要 0-9999 之外的值的扩展年份表示,请使用DATE_ATOM.
扩展表示只能在事先达成协议的情况下使用,这可能就是为什么某些解析器无法正确处理年份之前的符号的原因。尽管我也不确定是否DATE_ISO8601_EXPANDED与 ISO-8601 兼容,因为它讨论了扩展年份表示的恒定位数。
您可以在这里找到一些 ISO-8601 的链接,无需付费: https: //github.com/php/doc-en/pull/1619
| 归档时间: |
|
| 查看次数: |
724 次 |
| 最近记录: |