如何在PHP中将datetime转换为ISO 8601

wow*_*wow 87 php datetime date-format time-format datetime-format

如何将我的时间转换2010-12-30 23:21:46为ISO 8601日期格式?(-_-;)

ale*_*lex 213

面向对象

这是推荐的方式.

$datetime = new DateTime('2010-12-30 23:21:46');

echo $datetime->format(DateTime::ATOM); // Updated ISO8601
Run Code Online (Sandbox Code Playgroud)

程序

对于旧版本的PHP,或者您对程序代码更熟悉.

echo date(DATE_ISO8601, strtotime('2010-12-30 23:21:46'));
Run Code Online (Sandbox Code Playgroud)

  • `date('c',strtotime('2010-12-30 23:21:46'))`很好@Gordon :) (11认同)
  • [`echo date('c',...`用冒号生成输出.](http://stackoverflow.com/questions/3504476/help-me-with-formatting-a-date/3504534#3504534) (10认同)
  • 我会注意到使用`DATE_ISO8601`会产生一个与ISO8601稍有不同的日期字符串(在TZ中缺少冒号,ISO8601期望所有时间都是OR,而不是冒号,不是混合) - `date('c ')`确实产生了严格的ISO 8601有效日期 - 如果代码需要严格的ISO 8601日期时间格式,这可能导致难以追踪错误.参考:https://en.wikipedia.org/wiki/ISO_8601 (8认同)
  • 问题,输出是"2010-12-30T23:21:46 + 1100"如何使它成为"2010-12-30T23:21:46 + 11:00"? (3认同)
  • @wow试试这个`preg_replace('/(?<=\d {2})(?=\d {2} $)/',':','2010-12-30T23:21:46 + 1100') `.它输出`2010-12-30T23:21:46 + 11:00. (2认同)
  • @alex,由于某种原因,常量ISO8601与ISO-8601不兼容,请使用`DateTime :: ATOM`,请参阅http://php.net/manual/en/class.datetime.php#datetime中的注释. constants.iso8601 (2认同)
  • 我喜欢 PHP 文档中的这个 gem:“DATE_ISO8601 [...] 注意:此格式与 ISO-8601 不兼容,但出于向后兼容性的原因保留这种方式。使用 DateTime::ATOM 或 DATE_ATOM 与 ISO-兼容- 8601 代替。” (2认同)

tra*_*nte 34

在PHP 5之后,您可以使用:echo date("c");表单ISO 8601格式化日期时间.

http://ideone.com/nD7piL

备注:

关于这一点,这两个表达式对于时区有效,基本格式为:±[hh]:[mm], ±[hh][mm], or ±[hh].

但请注意,+ 0X:00是正确的,+ 0X00不适用于扩展使用.所以最好使用它date("c").这里有类似的讨论.

  • 注意与 `DATE_ISO8601` 的细微差别;`+0X:00` 与 `+0X00`。 (2认同)
  • @Ja͢ck `DATE_ISO8601` 不会产生有效的 ISO8601 表示。DATE_ATOM 确实如此 (2认同)

Joh*_*ers 5

How to convert from ISO 8601 to unixtimestamp :

strtotime('2012-01-18T11:45:00+01:00');
// Output : 1326883500
Run Code Online (Sandbox Code Playgroud)

How to convert from unixtimestamp to ISO 8601 (timezone server) :

date_format(date_timestamp_set(new DateTime(), 1326883500), 'c');
// Output : 2012-01-18T11:45:00+01:00
Run Code Online (Sandbox Code Playgroud)

How to convert from unixtimestamp to ISO 8601 (GMT) :

date_format(date_create('@'. 1326883500), 'c') . "\n";
// Output : 2012-01-18T10:45:00+00:00
Run Code Online (Sandbox Code Playgroud)

How to convert from unixtimestamp to ISO 8601 (custom timezone) :

date_format(date_timestamp_set(new DateTime(), 1326883500)->setTimezone(new DateTimeZone('America/New_York')), 'c');
// Output : 2012-01-18T05:45:00-05:00
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您尝试在 datetime-local 中设置一个值

date("Y-m-d\TH:i",strtotime('2010-12-30 23:21:46'));

//output : 2010-12-30T23:21
Run Code Online (Sandbox Code Playgroud)


Boy*_*dev 5

ISO 8601 在 PHP 中基本上表示为"Y-m-d\TH:i:sP"

您可以从常量中获取该值:

DateTime::ATOM- 适用于 7.2 以下的 PHP 版本(已删除)

DateTimeInterface::ATOM- 适用于 7.2 以后的 PHP 版本


mpe*_*pen 5

$datetime->format('Y-m-d\TH:i:s.u\Z')应该给出正确的格式,带有“T”分隔符、“Z”时区(确保首先转换为 UTC)和微秒(.u如果您不打算支持小数秒,请忽略)。

请参阅/sf/answers/667266281/讨论为什么应该使用T