UTC日付を次の形式で表示および処理する必要があります。
2013-06-28T22:15:00Z
この形式はISO8601標準の一部であるため、上記のような文字列からDateTimeオブジェクトを作成するのに問題はありません。ただし、希望する形式でDateTimeオブジェクトを表示するためのきれいな方法(substrやreplaceなどの文字列操作がないことを意味します)が見つかりません。サーバーと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'));
オブジェクト指向スタイルの日付オブジェクトを使用してこれを行うには、最初にタイムゾーンをUTCに設定してから、日付を出力する必要があります。
function dateTo8601Zulu(\DateTimeInterface $date):string {
return $date
->setTimezone(new \DateTimeZone('UTC'))
->format('Y-m-d\TH:i:s\Z');
}