PHPで時間(DATETIME型)をISO 8601に変換する方法
Created at
ISO 8601とは
日付と時刻の表記に関するISO(国際標準化機構)の国際規格のこと
- SEO対策で構造化データJSON-LDの日付の要素にも使われる
- 20221110T130211.28(基本形式)と 2022-11-10T13:02:11.28(拡張形式)の2種類の形式がある
やり方
パターン1
ローカルタイムゾーンをUTC(協定世界時)になおすパターン
- ローカルタイムゾーンをUTC(協定世界時)になおす
- フォーマットする
仕上がり↓
2022-11-10T13:02:11Z
パターン2
日本標準時(JST)に時差を表記するパターン
- フォーマットする
仕上がり↓
2022-11-10T04:02:11+09:00
タイムゾーン・UTC(協定世界時)との時差
日本のタイムゾーン(JST)は協定世界時(UTC)と9時間時差があるためUTC+09:00と表現される。
ちなみに…UTCはイギリスが基準でUTC+00:00と表すことができる。 韓国 KST UTC+09:00 アメリカ NY EST UTC-05:00
パターン1
ローカルタイムゾーンをUTC(協定世界時)になおす
$date = new \DateTime("2022-11-10 04:02:11", new \DateTimeZone('Asia/Tokyo'));
$date->setTimezone( new \DateTimeZone('UTC'));
$iso8601 = $date->format('Y-m-d\TH:i:s') . 'Z';
echo $iso8601;
// 2022-11-10T13:02:11Z
パターン2
日本標準時(JST)に時差を表記するパターン
$date = new \DateTime("2022-11-10 04:02:11", new \DateTimeZone('Asia/Tokyo'));
$iso8601 = $date->format('Y-m-d\TH:i:s') . '+09:00';
echo $iso8601;
// 2022-11-10T04:02:11+09:00
所感
JavaScriptのDateオブジェクトでmonth++したり Perlのlocaltimeで $year += 1900したり 日付処理はある程度決まり切ったお約束が多いなと。 UTCや時差もプログラミングをやっているとよく出てくるお約束の一つなので覚えておくと良いと思う。