PHPで日時のフォーマットをISO 8601型とDateTime型を相互に変換する方法
他社のAPI等のレスポンスで日時部分が「YYYY-MM-DDTHH:II:SSZ」という形式になっていることがある。調べたところISO 8601という日付と時刻の表記に関する国際規格らしい。これをPHPでDateTime型に変換したい。また、逆にDateTime型からISO 8601に変換もしたい。以下に方法をメモ。
対応方法
ISO 8601→DateTime
$date = '2024-05-30T07:56:26Z'; $new_date = DateTime::createFromFormat(DateTime::ISO8601,$date)->setTimezone(new DateTimeZone('Asia/Tokyo'))->format('Y-m-d H:i:s'); var_dump($new_date); //2024-05-30 16:56:26
DateTime→ISO 8601
$date = '2024-05-30 16:56:26'; $new_date = new DateTime($date, new DateTimeZone('Asia/Tokyo')); $new_date = $new_date->setTimezone(new DateTimeZone('UTC'))->format('Y-m-d\TH:i:s') . 'Z'; var_dump($new_date); //2024-05-30T07:56:26Z
その他
ISO 8601とタイムゾーンは別
ISO 8601は表記に関する規格でありタイムゾーンとは全く別のものになる。
また、タイムゾーンについてはざっくりと以下の通り。
- UTC → 世界で標準時として使用されているタイムゾーン
- JST → 日本で使用されているタイムゾーンでUTCに+9時間したもの
所感
ISO 8601型の日時を見た際に「これどうしてこんなフォーマットなんだろ?」と思っていたけど、調べてみて多少すっきりした。
あとはJavaScriptでも可能であれば相互に変換できるようにメモしておきたいところ。
参考サイト
関連記事
-
-
PHPで配列内から重複を削除する
やりたかった事はそのまま、配列内から重複を削除したかった。 ■参考サイト htt ...
-
-
PHP7.4でAPCuとOPcacheをインストールする方法
先日本ブログのサーバをCentOS6系から7系に移行し、その際にMySQLのバー ...
-
-
CodeIgniter4で祝日一覧APIにCURLでリクエストし結果をファイルキャッシュする方法
Codeigniter4.4.4で祝日一覧APIにCURLでリクエストしたい。尚 ...
-
-
PHPにてユニークかつランダム英数字の文字列を作成する方法
PHPでユニークな文字列を作成したかった。MySQLとかのオートインクリメントの ...
-
-
PHP-FPMのプロセス設定を行いサーバのメモリ消費を抑える方法
CentOS7からAlmaLlinux8に移行してから微妙にサーバのレスポンスが ...