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