Skip to content

Instantly share code, notes, and snippets.

@zhengkai
Last active April 28, 2017 07:37
Show Gist options
  • Save zhengkai/e1920365f3552c3101943eae52f69517 to your computer and use it in GitHub Desktop.
Save zhengkai/e1920365f3552c3101943eae52f69517 to your computer and use it in GitHub Desktop.
timezone demo
#! /usr/bin/env php
<?php
// 在穿越白令海峡的那条国际日期变更线上的太平洋部分,
// 那些岛国为了跟邻国的贸易方便,修改了法定时区
//
// 物理上,真太阳时只有 ±12,但是法律上,是 -12 到 +14
//
// 所以北京时间的每天下午 18:00 到 19:00,地球上有三个不同的日期
//
// 下面的例子里,同时有 4/7、4/8、4/9 三天
$a = DateTimeZone::listAbbreviations();
$l = [];
foreach ($a as $b) {
foreach ($b as $c) {
if (strlen($c['timezone_id']) < 3) {
continue;
}
if (abs($c['offset']) < 3600 * 11) {
continue;
}
$l[] = $c['timezone_id'];
}
}
$l = array_unique($l);
$l[] = 'Asia/Shanghai';
$i = strtotime('2017-04-08 10:50:00 UTC');
$o = (new DateTime('@' . $i))->setTimestamp($i);
foreach ($l as $tz) {
printf("%-21s %s\n", $tz, $o->setTimezone(new DateTimeZone($tz))->format('Y-m-d H:i:s'));
}
/*
output in PHP 7.1.4
Australia/Melbourne 2017-04-08 20:50:00
Antarctica/Macquarie 2017-04-08 21:50:00
Australia/ACT 2017-04-08 20:50:00
Australia/Brisbane 2017-04-08 20:50:00
Australia/Canberra 2017-04-08 20:50:00
Australia/Currie 2017-04-08 20:50:00
Australia/Hobart 2017-04-08 20:50:00
Australia/Lindeman 2017-04-08 20:50:00
Australia/NSW 2017-04-08 20:50:00
Australia/Queensland 2017-04-08 20:50:00
Australia/Sydney 2017-04-08 20:50:00
Australia/Tasmania 2017-04-08 20:50:00
Australia/Victoria 2017-04-08 20:50:00
America/Adak 2017-04-08 01:50:00
America/Atka 2017-04-08 01:50:00
America/Nome 2017-04-08 02:50:00
Pacific/Midway 2017-04-07 23:50:00
Pacific/Pago_Pago 2017-04-07 23:50:00
Pacific/Samoa 2017-04-07 23:50:00
Pacific/Bougainville 2017-04-08 21:50:00
Pacific/Chatham 2017-04-08 23:35:00
Pacific/Fiji 2017-04-08 22:50:00
Pacific/Tarawa 2017-04-08 22:50:00
Pacific/Kosrae 2017-04-08 21:50:00
Pacific/Kwajalein 2017-04-08 22:50:00
Australia/LHI 2017-04-08 21:20:00
Australia/Lord_Howe 2017-04-08 21:20:00
Pacific/Kiritimati 2017-04-09 00:50:00
Pacific/Majuro 2017-04-08 22:50:00
Pacific/Noumea 2017-04-08 21:50:00
Pacific/Norfolk 2017-04-08 21:50:00
Pacific/Nauru 2017-04-08 22:50:00
Pacific/Niue 2017-04-07 23:50:00
Pacific/Auckland 2017-04-08 22:50:00
Antarctica/McMurdo 2017-04-08 22:50:00
Antarctica/South_Pole 2017-04-08 22:50:00
Pacific/Enderbury 2017-04-08 23:50:00
Pacific/Pohnpei 2017-04-08 21:50:00
Pacific/Ponape 2017-04-08 21:50:00
Pacific/Guadalcanal 2017-04-08 21:50:00
Pacific/Apia 2017-04-08 23:50:00
Pacific/Fakaofo 2017-04-08 23:50:00
Pacific/Tongatapu 2017-04-08 23:50:00
Pacific/Funafuti 2017-04-08 22:50:00
Pacific/Efate 2017-04-08 21:50:00
Pacific/Wake 2017-04-08 22:50:00
Pacific/Wallis 2017-04-08 22:50:00
Asia/Shanghai 2017-04-08 18:50:00
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment