1

是的,我知道有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. 通常,用户不会为此参数传递转换时间戳。

4

1 回答 1

2

感谢 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']));
于 2013-05-31T18:30:03.977 回答