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


103

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


1
@戈登,是的,我得到了大约4,530个结果,我从@alex找到了答案

@哇,请指出为什么4530个结果都无法回答您的问题。
Gordon

1
@戈登,我仍在学习如何从A到Z书写,但是我发现他们教我如何从Z到A书写:)
哇,

@wow不。他们教您如何写字母($ from,$ to)。几乎所有这些都告诉您使用date($format, strtotime($dateString))DateTime等效的对象。它们的区别仅在于这些功能的输入。您所要做的就是转到PHP手册中的相应页面,然后找出输入的内容。
Gordon

3
@戈登是的,你是对的。我只知道字母,现在知道蜜蜂的时间。希望我在正确的学校。

Answers:


229

面向对象

这是推荐的方法。

$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'));

3
问题,输出是2010-12-30T23:21:46+1100如何做到的2010-12-30T23:21:46+11:00

2
@wow试试这个preg_replace('/(?<=\d{2})(?=\d{2}$)/', ':', '2010-12-30T23:21:46+1100')。它输出2010-12-30T23:21:46+11:00
Alex


12
date('c', strtotime('2010-12-30 23:21:46'))不错@Gordon :)

8
我会注意到,使用DATE_ISO8601产生的日期字符串与ISO8601略有不同(TZ中缺少冒号,ISO8601期望时间全部为有或没有冒号,而不是混合)- date('c')确实产生了严格的ISO 8601有效日期-如果代码需要严格的ISO 8601日期时间格式,则可能导致难以跟踪的错误。参考:en.wikipedia.org/wiki/ISO_8601
ckm

38

在PHP 5之后,您可以使用以下代码: echo date("c");格式格式为ISO 8601的日期时间。

http://ideone.com/nD7piL

注释说明:

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

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


1
注意与的细微差别DATE_ISO8601; +0X:00VS +0X00
杰克

@Ja͢ck,这需要否决吗?稍有差异通常是个坏主意。
rybo111

@ rybo111我认为没有理由拒绝这个答案;技术上,都'c'DATE_ISO8601产生有效的ISO8601时表示。
插孔

我添加了笔记以作答。
trante

@Ja͢ck DATE_ISO8601没有产生有效的ISO8601表示形式。DATE_ATOM确实做到了
船长Obvious

4

如何从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


1

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

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

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

在对已接受答案的评论中提到了类似的解决方案
sushant047
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.