【发布时间】:2015-04-23 01:49:30
【问题描述】:
我想获取使用夏令时的时区中两个日期之间的日期时间间隔。
以下片段显示了问题。
$timezone = new DateTimeZone('UTC');
$from_date_obj = DateTime::createFromFormat('Y-m-d H:i:s', '2014-10-31 23:59:59',$timezone);
$to_date_obj = DateTime::createFromFormat('Y-m-d H:i:s', '2014-11-20 23:47:02',$timezone);
$interval = $from_date_obj->diff($to_date_obj, TRUE);
print_r($interval);
对于 UTC 时区,这显示:
DateInterval Object
(
[y] => 0
[m] => 0
[d] => 19
[h] => 23
[i] => 47
[s] => 3
[weekday] => 0
[weekday_behavior] => 0
[first_last_day_of] => 0
[invert] => 0
[days] => 19
[special_type] => 0
[special_amount] => 0
[have_weekday_relative] => 0
[have_special_relative] => 0
)
现在这个:
$timezone = new DateTimeZone('America/Los_Angeles');
$from_date_obj = DateTime::createFromFormat('Y-m-d H:i:s', '2014-10-31 23:59:59',$timezone);
$to_date_obj = DateTime::createFromFormat('Y-m-d H:i:s', '2014-11-20 23:47:02',$timezone);
$interval = $from_date_obj->diff($to_date_obj, TRUE);
print_r($interval);
显示:
DateInterval Object
(
[y] => 0
[m] => 0
[d] => 20
[h] => -1
[i] => 47
[s] => 3
[weekday] => 0
[weekday_behavior] => 0
[first_last_day_of] => 0
[invert] => 0
[days] => 19
[special_type] => 0
[special_amount] => 0
[have_weekday_relative] => 0
[have_special_relative] => 0
)
UTC 显示 19 天/23 小时/47 分 3 秒。 PT 显示 20 天/-1 小时/47 分 3 秒。我认为 PT 的正确答案应该是 20 天/0 小时/47 分 3 秒。
有什么方法可以在太平洋时区进行差异化而不是以负小时结束? -1 小时指示是否是预期的结果,它究竟意味着什么?
更新:我发现 PHP 似乎并没有处理这里讨论的 DST 的差异:
PHP's DateTime::Diff gets it wrong?
就我得到的结果而言,它似乎是上面链接中所示的 PHP 错误。
【问题讨论】: