1

我有这个代码:

<?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)而关闭。

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

4

1 回答 1

1

是的,当回显 a 时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 的原生 DateTime API。真的没有理由仅仅因为它存在于 ZF 中就使用 Zend_Date。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

于 2011-09-06T09:40:02.663 回答