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

如何从 2010-12-30 23:21:46转换我的时间</ code> ISO 8601日期格式? (-_-;)</ p>
</ div>

展开原文

原文

How do I convert my time from 2010-12-30 23:21:46 to ISO 8601 date format? (-_-;)

dpd3982
dpd3982 是的,你没错。我只知道字母表,现在拼写蜂时间。希望我在正确的学校。
9 年多之前 回复
dragon8002
dragon8002 不,他们教你如何写字母($from,$to)。几乎所有这些都告诉你使用date($format,strtotime($dateString))或DateTime对象等效。它们仅对这些功能的输入有所不同。您所要做的就是转到PHP手册中的相应页面,找出输入内容。
9 年多之前 回复
duan3601
duan3601 我还在学习如何写A到Z,但我发现他们教我如何从Z写到A:)
9 年多之前 回复
douchen3562
douchen3562 请指出为什么4530结果都没有回答你的问题。
9 年多之前 回复
dongtaochan0777
dongtaochan0777 是的,我得到了大约4,530个结果,我从@alex找到答案
9 年多之前 回复

5个回答

Object Oriented

This is the recommended way.

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

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

Procedural

For older versions of PHP, or if you are more comfortable with procedural code.

echo date(DATE_ISO8601, strtotime('2010-12-30 23:21:46'));
douzen1896
douzen1896 我喜欢PHP文档中的这个gem:“DATE_ISO8601 [...]注意:这种格式与ISO-8601不兼容,但出于向后兼容的原因,这种格式是这样的。使用DateTime :: ATOM或DATE_ATOM与ISO兼容 相反,8601。“
3 年多之前 回复
dongsong73032
dongsong73032 如何从第一个方法中删除秒。 它给我输出:2017-03-18T11:30:00 + 00:00。 但我需要:2017-03-18T11:30 + 00:00。
3 年多之前 回复
dongye4192
dongye4192 由于某种原因,常量ISO8601与ISO-8601不兼容,请改用DateTime :: ATOM,请参阅php.net/manual/en/class.datetime.php#datetime.constants.iso8601中的注释。
接近 5 年之前 回复
duanlei2458
duanlei2458 DATE_ISO8601导致JavaScript出现问题,因为ECMAScript语言规范要求HH:mm ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
大约 5 年之前 回复
douyingbei1458
douyingbei1458 如果冒号用于分隔时间组件,那么时区指示符必须遵循。
大约 5 年之前 回复
dtmu88600
dtmu88600 我会注意到使用DATE_ISO8601会产生一个与ISO8601略有不同的日期字符串(在TZ中缺少冒号,ISO8601期望所有时间都是OR,而不是冒号,而不是混合) - date('c') 产生严格的ISO 8601有效日期 - 如果代码需要严格的ISO 8601日期时间格式,这可能导致难以追踪错误。 参考:en.wikipedia.org/wiki/ISO_8601
5 年多之前 回复
dongle7882
dongle7882 日期('c',strtotime('2010-12-30 23:21:46'))很好@Gordon :)
9 年多之前 回复
drk7700
drk7700 有意思,我从来不知道。
9 年多之前 回复
douchan6512
douchan6512 echo date('c', - 生成带冒号的输出。
9 年多之前 回复
du31992
du31992 试试这个preg_replace('/(?<= \ d {2})(?= \ d {2} $)/',':','2010-12-30T23:21:46 + 1100')。 它输出2010-12-30T23:21:46 + 11:00。
9 年多之前 回复
dthswrp84966
dthswrp84966 问题,输出是2010-12-30T23:21:46 + 1100如何让它成为2010-12-30T23:21:46 + 11:00?
9 年多之前 回复



在PHP 5之后,您可以使用: echo date(“c”); </ code>形式ISO 8601格式化日期时间 。</ p>

http://ideone.com/nD7piL </ p>

< p>注释注释:</ p>

关于,这两个 表达式对于时区有效,基本格式为:±[hh]:[mm],±[hh] [mm]或±[hh] </ code>。</ p>

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

展开原文

原文

After PHP 5 you can use this: echo date("c"); form ISO 8601 formatted datetime.

http://ideone.com/nD7piL

Note for comments:

Regarding to this, both of these expressions are valid for timezone, for basic format: ±[hh]:[mm], ±[hh][mm], or ±[hh].

But note that, +0X:00 is correct, and +0X00 is incorrect for extended usage. So it's better to use date("c"). A similar discussion here.

dongshungai4857
dongshungai4857 我同意@LeeButler,DATE_ISO8601不会生成有效的ISO8601字符串。 这是非常令人困惑的,但我怀疑PHP会解决这个问题,因为这对他们来说是一个BC休息。
大约 2 年之前 回复
douju2474
douju2474 对于常量的命名,似乎有足够的理由将其归类为错误
大约 2 年之前 回复
doumo0206
doumo0206 我不确定,但是在Php文档中记录它并不完全兼容。
大约 2 年之前 回复
doujiyuan0211
doujiyuan0211 有错误报告可供参考吗?
大约 2 年之前 回复
donglou1866
donglou1866 DATE_ISO8601不生成有效的ISO8601表示。 虽然DATE_ATOM确实如此
大约 2 年之前 回复
doushi1964
doushi1964 我添加了一个注释来回答。
大约 5 年之前 回复
doushuhuai7247
doushuhuai7247 我认为没有理由对这个答案进行投票; 从技术上讲,'c'和DATE_ISO8601都产生有效的ISO8601时间表示。
大约 5 年之前 回复
dotxxh0998
dotxxh0998 这需要进行投票吗? 略有不同通常是一个坏主意。
大约 5 年之前 回复
duanbo19834
duanbo19834 注意与DATE_ISO8601的细微差别; + 0X:00 vs + 0X00。
6 年多之前 回复
drghhp8706
drghhp8706 没错,我们可以使用这种语法。
7 年多之前 回复

How to convert from ISO 8601 to unixtimestamp :

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

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

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

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

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



  date(“c”); 

//输出:2018-02-28T13:12:44+ 01:00
</ code> </ pre>
</ div>

展开原文

原文

date("c");

//output : 2018-02-28T13:12:44+01:00

donglu8549
donglu8549 只是为了添加代码格式。 这是Stackoverflow工作原理的一部分
2 年多之前 回复
douzhong8856
douzhong8856 我不明白为什么@Jon B编辑了我的答案!
2 年多之前 回复



如果您尝试在datetime-local </ p>

  date(“Ymd”中设置一个值 \ TH:我“,strtotime('2010-12-30 23:21:46')); 

//输出:2010-12-30T23:21
</ code> </ pre>
</ DIV>

展开原文

原文

If you try set a value in datetime-local

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

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

dongpa6867
dongpa6867 在给出的答案的评论中提到了类似的解决方案
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问