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

如何在PHP中将datetime转换为ISO 8601,php,datetime,date-format,datetime-format,time-format,Php,Datetime,Date Format,Datetime Format,Time Format,如何将时间从2010-12-30 23:21:46转换为ISO 8601日期格式?(-)面向对象 这是推荐的方法 $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:

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

面向对象 这是推荐的方法

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

PHP5之后,您可以使用以下内容:
echo date(“c”)格式ISO 8601格式化日期时间

注释供评论:

关于,对于基本格式:
±[hh]:[mm]、±[hh][mm]或±[hh]
,这两个表达式都适用于时区

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

如何从ISO 8601转换为unixtimestamp: 如何从unixtimestamp转换为ISO 8601(时区服务器): 如何从unixtimestamp转换为ISO 8601(GMT): 如何从unixtimestamp转换为ISO 8601(自定义时区):
如果您尝试在datetime local中设置一个值

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

//output : 2010-12-30T23:21
您可以这样尝试:

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

echo $datetime->format(DATE_ATOM);

问题,输出是
2010-12-30T23:21:46+1100
如何使其成为
2010-12-30T23:21:46+11:00
?@wow试试这个
preg_replace('/(
date('c',strotime('2010-12-30 23:21:46'))
nice@Gordon:)我要注意,使用
date ISO8601
生成的日期字符串与ISO8601稍有不同(TZ中缺少冒号,ISO8601希望时间全部有冒号或全部没有冒号,而不是混合)
date('c'))
确实会生成严格的ISO 8601有效日期-如果代码要求严格的ISO 8601日期时间格式,这可能会导致难以跟踪错误。Ref:@Gordon yes我从@alex@wow请指出为什么4530个结果中没有一个能回答你的问题。@Gordon我仍在学习如何从A到Z写作,但我发现它们教会了我如何写作从Z到A:)@wow不。他们教你如何写字母表($from,$to)。几乎所有人都告诉你使用
date($format,strotime($dateString))
日期时间
对象等价物。它们只是在这些函数的输入上有所不同。你所要做的就是找出输入是什么。@Gordon是的,你是对的。我刚刚知道字母表,现在拼写比赛时间。希望我在正确的学校。注意
日期ISO8601
+0X:00
vs
+0X00
@Ja͢ck这是否需要否决表决,那么?一个微小的差异通常是个坏主意。@rybo111我看不出有理由否决这个答案;从技术上讲,
'c'
日期ISO8601
都会产生有效的ISO8601时间表示。我添加了一个注释来回答。@Ja͢ck
日期ISO8601
不会产生valid ISO8601表示法。DATE_ATOM不认为在给公认答案的评论中提到了类似的解决方案,使用
DATE_ATOM
c
早在几年前就已在该页面上发布。
date_format(date_create('@'. 1326883500), 'c') . "\n";
// Output : 2012-01-18T10:45:00+00:00
date_format(date_timestamp_set(new DateTime(), 1326883500)->setTimezone(new DateTimeZone('America/New_York')), 'c');
// Output : 2012-01-18T05:45:00-05:00
date("Y-m-d\TH:i",strtotime('2010-12-30 23:21:46'));

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

echo $datetime->format(DATE_ATOM);