我需要以以下格式显示和处理UTC日期:
2013-06-28T22:15:00Z
由于这种格式是ISO8601标准的一部分,所以我可以从上面的字符串中创建DateTime对象。然而,我找不到一种干净的方式(意味着没有像substr和replace等字符串操作)来以所需的格式显示我的DateTime对象。我试图调整服务器和php日期时间设置,但收效甚微。我总是得到:
$date->format(DateTime::ISO8601); // gives 2013-06-28T22:15:00+00:00
是否有任何日期格式或配置设置可以为我提供所需的字符串?或者我必须手动将"Z"附加到自定义时间格式?
否,所需格式没有特殊的常量。我会使用:
$date->format('Y-m-d'TH:i:s'Z');
但您必须确保您使用的时间确实是UTC,以避免应用程序中出现解释错误。
在PHP 8中添加了格式字符p
:
$timestamp = new DateTimeImmutable('2013-06-28T22:15:00Z');
echo $timestamp->format('Y-m-d'TH:i:sp');
// 2013-06-28T22:15:00Z
如果您使用Carbon,则方法为:
echo $dt->toIso8601ZuluString();
// 2019-02-01T03:45:27Z
为了获得所需格式的UTC日期,您可以使用以下内容:
gmdate('Y-m-d'TH:i:s'Z', $date->format('U'));
要使用面向对象风格的日期对象,您需要首先将时区设置为UTC,然后输出日期:
function dateTo8601Zulu('DateTimeInterface $date):string {
return (clone $date)
->setTimezone(new 'DateTimeZone('UTC'))
->format('Y-m-d'TH:i:s'Z');
}
编辑:在更改时区之前克隆对象。
由于引入了PHP 7.2 DateTimeInterface::ATOM
以支持DateTimeInterface::ISO8601
,尽管由于向后兼容性的原因,它仍然存在。
使用
$dateTimeObject->format(DateTimeInterface::ATOM)