タイムゾーンの変換 (MySQLとPHPによる方法)

  • 2
    いいね
  • 0
    コメント

とあるタイムゾーンの時間を他のタイムゾーンの時間に変換する。
Daylight Saving Time(サマータイム) とかも考慮する。

といった時に使える方法。

MySQLのを使った方法

SELECT CONVERT_TZ('2016-08-29 00:00:00', 'America/Los_Angeles', 'UTC') AS time; // PDT
SELECT CONVERT_TZ('2016-01-29 00:00:00', 'America/Los_Angeles', 'UTC') AS time; // PST

結果

+---------------------+
| time                |
+---------------------+
| 2016-08-29 07:00:00 |
+---------------------+

+---------------------+
| time                |
+---------------------+
| 2016-01-29 08:00:00 |
+---------------------+

CONVERT_TZ が NULLを返す場合は zoneinfo から mysql.time_zone にデータを入れる必要がある
参考:

PHPを使った方法

function convert_tz($time, $from_tz, $to_tz)
{
    $date = new DateTime($time, new DateTimeZone($from_tz));
    $date->setTimezone(new DateTimeZone($to_tz));
    return $date->format('Y-m-d H:i:s');
}

echo convert_tz("2016-08-29 00:00:00", "America/Los_Angeles", "UTC")."\n";
echo convert_tz("2016-01-29 00:00:00", "America/Los_Angeles", "UTC")."\n";

結果

2016-08-29 07:00:00
2016-01-29 08:00:00

参考: