是的,我知道有DateTimeZone::getTransitions()
。但我有点对它的输出感到困惑。我期望的是这样的列表:
2013-03-31 03:00:00 -> 2013-03-31 04:00:00
2013-10-27 03:00:00 -> 2013-10-27 02:00:00
更重要的是,我想知道为什么它会返回有关$timestamp_begin
. 通常,用户不会为此参数传递转换时间戳。
感谢 Pekka 웃 的帮助,我想出了以下脚本:
date_default_timezone_set('America/Havana');
$transitions = (new DateTime)->getTimeZone()->getTransitions(
strtotime('2013-01-01'),
strtotime('2013-12-31'));
date_default_timezone_set('UTC');
for ($i = 1; $i < count($transitions); $i++)
printf("%s -> %s\n",
strftime("%F %T",
$transitions[$i]['ts'] + $transitions[$i - 1]['offset']),
strftime("%F %T",
$transitions[$i]['ts'] + $transitions[$i]['offset']));