How do I convert datetime to ISO 8601 in PHP

PhpDatetimeDate FormatDatetime FormatTime Format

Php Problem Overview


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

Php Solutions


Solution 1 - Php

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

Solution 2 - Php

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.

Solution 3 - Php

###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') . "\n";
// 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

Solution 4 - Php

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

Solution 5 - Php

According to PHP offcial documentation you can simply format it to:

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

Solution 6 - Php

ISO 8601 is basically represented in PHP as "Y-m-d\TH:i:sP"

You can get this value from a constant:

DateTime::ATOM - for PHP versions below 7.2 (was removed)

DateTimeInterface::ATOM - for PHP versions since 7.2

Solution 7 - Php

You can try this way:

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

echo $datetime->format(DATE_ATOM);

Solution 8 - Php

$datetime->format('Y-m-d\TH:i:s.u\Z') should give the proper format, with the "T" separator, "Z" timezone (make sure to convert to UTC first) and microseconds (omit .u if you don't intend to support fractional seconds).

See https://stackoverflow.com/a/9532375/65387 for discussion why should use T

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionwowView Question on Stackoverflow
Solution 1 - PhpalexView Answer on Stackoverflow
Solution 2 - PhptranteView Answer on Stackoverflow
Solution 3 - PhpJohn SlegersView Answer on Stackoverflow
Solution 4 - PhpRúbia AlvesView Answer on Stackoverflow
Solution 5 - PhpA.BENView Answer on Stackoverflow
Solution 6 - PhpBoykodevView Answer on Stackoverflow
Solution 7 - PhpDmitryView Answer on Stackoverflow
Solution 8 - PhpmpenView Answer on Stackoverflow