我有这段代码:
<?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)。
解决这个问题的最佳方法是什么?
答案 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