概要
APIで日付を返すときのフォーマットについて調べたところISO8601がヒットしたので、調べてみた結果をメモしておく。
PostgreSQL
PostgreSQLで日付を生成してみる。
SELECT to_char('2018-07-10 09:00:00'::timestamp, 'YYYY-MM-DD"T"HH24:MI:SS"Z"'); -- "2018-07-10T09:00:00Z"
SELECT to_char(NOW() at time zone 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS"Z"'); -- "2018-07-10T09:07:10Z"
MySQL
SELECT DATE_FORMAT(CONVERT_TZ('2017-07-10 18:00:00', 'Asia/Tokyo', 'UTC'), "%Y-%m-%dT%TZ"); -- "2017-07-10T09:00:00Z"
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(CONVERT_TZ('2017-07-10 18:00:00', 'Asia/Tokyo', 'UTC'))); -- "2017-07-10 09:00:00"
PHP
PHPだとこうかな?
$date = new \DateTime("2018-07-10 18:00:00", new \DateTimeZone('Asia/Tokyo'));
$date->setTimezone( new \DateTimeZone('UTC'));
$iso8601 = $date->format('Y-m-d\TH:i:s') . 'Z';
var_dump($iso8601); # string(20) "2018-07-10T09:00:00Z"