php间隔和时区

我希望在使用夏令时的时区中的两个日期之间获取日期时间间隔。

以下snipet显示问题。

$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的DateTime :: Diff得到它错误?

至于我得到的结果似乎是一个PHP错误,如上面的链接所示。


你使用什么PHP版本? 我得到这个结果第二代码块 -

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 
)

这两个代码应该显示相同的结果,因为每次只比较相同的日期和不同的时区


这里提出了两个问题:一个是由于DST(夏令时)导致时钟变化的两个日期和时间之间的差异。 实际上,两个日期和时间之间的差异应该考虑到时钟变化,但显然不是。

这在以下链接中记录得非常好:

PHP的DateTime :: Diff得到它错误?

此外,我正在粉饰-1问题作为一个PHP错误。 由于PHP无法处理两个日期时间之间的DST变化,并且在我的情况下,无需考虑DST的差异就足够接近了,我只需用UTC进行差异计算。

链接地址: http://www.djcxy.com/p/10117.html

上一篇: php interval and timezone

下一篇: Calculate number of days between two dates with accuracy