勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PHPで日時のフォーマットをISO 8601型とDateTime型を相互に変換する方法

  PHP

他社の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でも可能であれば相互に変換できるようにメモしておきたいところ。

 

参考サイト

https://devil-code.com/blogs/PHP/iso8601/

https://zenn.dev/karaageeeee/articles/edcbbae275ed67

 - PHP

  関連記事

PHP8系で「Warning: Attempt to read property
PHP8系で「Warning: Attempt to read property "xxxxxx" 」エラーの対応方法

PHP8系&WordPress6.4.3で「Warning: Attem ...

PHPで土日祝日及び営業時間を考慮した上で翌○営業日を計算する方法
PHPで土日祝日及び営業時間を考慮した上で翌○営業日を計算する方法

PHPで翌○営業日を計算したい。例えば本日が2021/04/15で翌5営業日を計 ...

PHPのsetcookieで「Cannot modify」エラーの対応方法
PHPのsetcookieで「Cannot modify」エラーの対応方法

PHPでsetcookieを使うと「Warning: Cannot modify ...

PHPとStripeで定額課金(サブスクリプション)実装する方法
PHPとStripeで定額課金(サブスクリプション)実装する方法

PHPとStripeで1ヶ月ごとに500円でサイト内のサービスを使い放題、といっ ...

PHPでdatetime型のデータを年月日時分秒に分割する方法
PHPでdatetime型のデータを年月日時分秒に分割する方法

datetime型を年月日時分秒でそれぞれに分割させたい時に今まではいちいちex ...