Zend_Date将时区添加到减法结果中

时间:2011-09-06 09:00:44

标签: php zend-framework zend-date

我有这段代码:

<?php
    $start = new Zend_Date("2011-09-06T10:00:00+02:00",Zend_Date::ISO_8601);
    $end   = new Zend_Date("2011-09-06T10:01:00+02:00",Zend_Date::ISO_8601);
    echo $end->sub($start);
?>

简而言之:我创建了两个日期,它们之间有一分钟的差异。然后我打印出它们之间的差异(减法)。

然而,结果是:

  

01-01-1970 02:01:00

基本上,我从这种行为中理解的是Zend_Date在没有考虑时区的情况下在日期上运行,然后将时区放回到结果中。当然,这意味着减法结果与时区的值相关(在我的情况下为+ 2h)。

解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

是的,当回复Zend_Date时,会考虑您的时区。要获得格式为GMT日期的差异,您必须明确设置时区:

$start = new Zend_Date("2011-09-06T10:00:00+02:00",Zend_Date::ISO_8601);
$end   = new Zend_Date("2011-09-06T10:01:00+02:00",Zend_Date::ISO_8601);
echo $end->sub($start)->setTimezone('GMT')->get(Zend_Date::ISO_8601);

这将输出:1970-01-01T00:01:00 + 00:00

在旁注中,如果您不需要Zend_Date的动态本地化功能,最好避免使用它或PHP's native DateTime API。没有理由使用Zend_Date只因为它存在于ZF中。 PHP自己的DateTime API更快更容易使用。获得与DateTime API的时差是

$start = new DateTime("2011-09-06T10:00:00+02:00");
$end = new DateTime("2011-09-06T10:01:00+02:00");
echo $start->diff($end)->format('%H:%I:%S');

将输出00:01:00