编程语言
首页 > 编程语言> > php-Zend_Date计算两个日期相减的错误

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.

标签:zend-date,zend-framework,php,date
来源: https://codeday.me/bug/20191202/2085871.html