How to format an UTC date to use the Z (Zulu) zone designator in php?

PhpDatetimeIso8601

Php Problem Overview


I need to display and handle UTC dates in the following format:

> 2013-06-28T22:15:00Z

As this format is part of the ISO8601 standard I have no trouble creating DateTime objects from strings like the one above. However I can't find a clean way (meaning no string manipulations like substr and replace, etc.) to present my DateTime object in the desired format. I tried to tweak the server and php datetime settings, with little success. I always get:

$date->format(DateTime::ISO8601); // gives 2013-06-28T22:15:00+00:00

Is there any date format or configuration setting that will give me the desired string? Or I'll have to append the 'Z' manually to a custom time format?

Php Solutions


Solution 1 - Php

No, there is no special constant for the desired format. I would use:

$date->format('Y-m-d\TH:i:s\Z');

But you will have to make sure that the times you are using are really UTC to avoid interpretation errors in your application.

Solution 2 - Php

If you are using Carbon then the method is:

echo $dt->toIso8601ZuluString();    
// 2019-02-01T03:45:27Z

Solution 3 - Php

In order to get the UTC date in the desired format, you can use something like this:

gmdate('Y-m-d\TH:i:s\Z', $date->format('U'));

Solution 4 - Php

In PHP 8 the format character p was added:

$timestamp = new DateTimeImmutable('2013-06-28T22:15:00Z');
echo $timestamp->format('Y-m-d\TH:i:sp');
// 2013-06-28T22:15:00Z

Solution 5 - Php

To do this with the object-oriented style date object you need to first set the timezone to UTC, and then output the date:

function dateTo8601Zulu(\DateTimeInterface $date):string {
  return (clone $date)
    ->setTimezone(new \DateTimeZone('UTC'))
    ->format('Y-m-d\TH:i:s\Z');
}

Edit: clone object before changing timezone.

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
QuestionsallaigyView Question on Stackoverflow
Solution 1 - Phphek2mglView Answer on Stackoverflow
Solution 2 - PhpEdmund SulzanokView Answer on Stackoverflow
Solution 3 - PhpYnhockeyView Answer on Stackoverflow
Solution 4 - PhpAndreKRView Answer on Stackoverflow
Solution 5 - PhpChris SeufertView Answer on Stackoverflow