如何在 PHP 中将日期时间转换为 ISO 8601

Posted

技术标签:

【中文标题】如何在 PHP 中将日期时间转换为 ISO 8601【英文标题】:How do I convert datetime to ISO 8601 in PHP 【发布时间】:2011-07-16 09:21:01 【问题描述】:

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

【问题讨论】:

@Gordon 是的,我得到了about 4,530 results,我从@alex 那里找到了答案 @wow 请指出为什么 4530 个结果都没有回答您的问题。 @Gordon 我还在学习如何从 A 写到 Z,但我发现他们教我如何从 Z 写到 A :) @wow 不。他们教你如何写字母($from, $to)。几乎所有人都告诉您使用date($format, strtotime($dateString))DateTime 等效对象。它们仅在这些功能的输入上有所不同。您所要做的就是go to the correponding pages in the php Manual 并找出输入是什么。 @Gordon 是的,你是对的。我只知道字母表,现在拼写蜜蜂时间。希望我在合适的学校。 【参考方案1】:

面向对象

这是推荐的方式。

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

echo $datetime->format(DateTime::ATOM); // Updated ISO8601

程序

适用于旧版本的 PHP,或者如果您更喜欢程序代码。

echo date(DATE_ISO8601, strtotime('2010-12-30 23:21:46'));

【讨论】:

问题,输出是2010-12-30T23:21:46+1100 怎么变成2010-12-30T23:21:46+11:00 echo date('c', … produces the output with the colon. date('c', strtotime('2010-12-30 23:21:46'))不错@Gordon :) 我会注意到,使用 DATE_ISO8601 会产生一个与 ISO8601 稍有不同的日期字符串(TZ 中缺少冒号,ISO8601 预计时间全部为 OR 全部不带冒号,而不是混合) - date('c') 确实会产生严格的 ISO 8601 有效日期 - 如果代码需要严格的 ISO 8601 日期时间格式,这可能会导致难以跟踪的错误。参考:en.wikipedia.org/wiki/ISO_8601 @alex,由于某种原因,常量 ISO8601 与 ISO-8601 不兼容,请改用DateTime::ATOM,请参阅php.net/manual/en/class.datetime.php#datetime.constants.iso8601 中的注释【参考方案2】:

在 PHP 5 之后你可以使用这个:echo date("c"); form ISO 8601 formatted datetime。

http://ideone.com/nD7piL

cmets注意事项:

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

但请注意,+0X:00 是正确的,而 +0X00 对于扩展使用是不正确的。所以最好使用date("c")。类似的讨论here。

【讨论】:

注意与DATE_ISO8601的细微差别; +0X:00+0X00. @Ja͢ck 那么这需要否决吗?细微的差别通常是个坏主意。 @rybo111 我看不出有理由否决这个答案;从技术上讲,'c'DATE_ISO8601 都产生有效的 ISO8601 时间表示。 我添加了一个注释来回答。 @Ja͢ck DATE_ISO8601 不会产生有效的 ISO8601 表示。 DATE_ATOM 确实如此【参考方案3】:

如何从 ISO 8601 转换为 unixtimestamp :

strtotime('2012-01-18T11:45:00+01:00');
// Output : 1326883500

如何从 unixtimestamp 转换为 ISO 8601(时区服务器):

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

如何从 unixtimestamp 转换为 ISO 8601 (GMT):

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

如何从 unixtimestamp 转换为 ISO 8601(自定义时区):

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

【讨论】:

【参考方案4】:

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

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

//output : 2010-12-30T23:21

【讨论】:

在接受答案的 cmets 中提到了类似的解决方案【参考方案5】:

你可以试试这个方法:

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

echo $datetime->format(DATE_ATOM);

【讨论】:

使用 DATE_ATOMc 早在几年前就已在此页面上发布过。【参考方案6】:

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

你可以从一个常量中得到这个值:

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

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

【讨论】:

【参考方案7】:

根据PHP offcial documentation,您可以简单地将其格式化为:

echo $objDateTime->format('c'); // ISO8601 formated datetime
echo $objDateTime->format(DateTime::ISO8601); // Another way to get an ISO8601 formatted string

【讨论】:

以上是关于如何在 PHP 中将日期时间转换为 ISO 8601的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Pandas 数据框中将日期转换为 ISO-8601 DateTime 格式

在javascript中将iso日期转换为毫秒

在linux bash中将ISO日期转换为纪元以来的秒数

将日期转换为 ISO 星期日期

如何将 Excel 中的日期转换为 ISO 8601 格式

在 Ruby 中将 UTC 时间戳转换为 ISO 8601