web-dev-qa-db-ja.com

PHPでZ(Zulu)ゾーン指定子を使用するためにUTC日付をフォーマットする方法は?

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」を追加する必要がありますか?

36
sallaigy

いいえ、目的の形式に特別な定数はありません。私は使うだろう:

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

ただし、アプリケーションでの解釈エラーを回避するために、使用している時間が本当にUTCであることを確認する必要があります。

82
hek2mgl

UTC日付を目的の形式で取得するには、次のようなものを使用できます。

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

オブジェクト指向スタイルの日付オブジェクトを使用してこれを行うには、最初にタイムゾーンをUTCに設定してから、日付を出力する必要があります。

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