微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php-Zend_Date计算两个日期相减的错误

我写这个函数

public function calcDifferentDate($dateStart, $dateEnd = false, $output = Zend_Date::DAY)
{
    $dateEnd = $dateEnd ? $dateEnd : Zend_Date::Now()->toString('YYYY-MM-dd');
    $dateStartZD = new Zend_Date($dateStart, 'YYYY-MM-dd');
    $dateEndZD = new Zend_Date($dateEnd, 'YYYY-MM-dd');
    return $dateEndZD->sub($dateStartZD)->toString($output);
}

如果调用此:

echo calcDifferentDate('2011-11-10');

今天是:“ 2011-11-14”
返回的输出是05而不是04
为什么?我在哪里做错了?

附言我使用ZF 1.11.11版本

我找到了解决方

这项工作对! :D

public function calcDaysDiffDate($dateStart, $dateEnd = '')
{
    $dateEnd = !empty($dateEnd) ? $dateEnd : Zend_Date::Now()->toString('YYYY-MM-dd');
    $dateStartZD = new Zend_Date($dateStart, 'YYYY-MM-dd');
    $dateEndZD = new Zend_Date($dateEnd, 'YYYY-MM-dd');
    $dateStartZD->sub($dateEndZD);
    return $dateStartZD->getTimestamp() / (60 * 60 * 24);
}

解决方法:

尝试返回以下内容

$newDate = new Zend_Date($dateEndZD->sub($dateStartZD), 'YYYY-MM-dd');
return $newDate->get($output);

计算不正确,我将在稍后尝试.但是现在,您需要与之相似的逻辑,因为正如我在评论中所说,由于日期减法返回的是整数而不是Zend_Date对象,因此您的方法导致了致命错误调用toString().

编辑

抱歉,我的前瞻性回答不够周到.经过更仔细的测试,我相信我找到了您的问题. sub()函数接受可选的第二个参数$part,这是将从结果日期减法中返回的日期的一部分.即使您可以,也无需立即调用toString().

因此,在没有其他条件的情况下,这里使用固定的return语句:

public function calcDifferentDate($dateStart, $dateEnd = false, $output = Zend_Date::DAY)
{
    $dateEnd = $dateEnd ? $dateEnd : Zend_Date::Now()->toString('YYYY-MM-dd');
    $dateStartZD = new Zend_Date($dateStart, 'YYYY-MM-dd');
    $dateEndZD = new Zend_Date($dateEnd, 'YYYY-MM-dd');
    return $dateEndZD->sub($dateStartZD, $output); // <-- fixed
}

第二次编辑

与OP聊天后,由于Zend_Date :: sub()方法的差异,我的解决方案似乎不适用于ZF1.11.x.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐