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.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...