とあるタイムゾーンの時間を他のタイムゾーンの時間に変換する。
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 にデータを入れる必要がある
参考:
- http://d.hatena.ne.jp/Craftworks/20110507/1304762654
- http://dev.mysql.com/doc/refman/5.6/ja/mysql-tzinfo-to-sql.html
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
参考: