如何在 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_ATOM
和 c
早在几年前就已在此页面上发布过。【参考方案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的主要内容,如果未能解决你的问题,请参考以下文章