簡體   English   中英

如何格式化UTC日期以在php中使用Z(祖魯語)區域指示符?

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

我需要按以下格式顯示和處理 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,以避免在您的應用程序中出現解釋錯誤。

為了以所需格式獲取 UTC 日期,您可以使用以下內容:

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

如果您使用的是 Carbon,則方法是:

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

要使用面向對象樣式的日期對象執行此操作,您需要首先將時區設置為 UTC,然后輸出日期:

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

編輯:在更改時區之前克隆對象。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM