我写这个函数:
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
为什么?我在哪里做错了?
P.S。我使用的是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);
}
答案 0 :(得分:1)
请尝试返回此内容:
$newDate = new Zend_Date($dateEndZD->sub($dateStartZD), 'YYYY-MM-dd');
return $newDate->get($output);
计算结果不正确,我稍后会尝试解决。但就目前而言,您需要将逻辑与此类似,因为正如我在评论中所说,由于您的日期减法,您的方法导致了fatal error
返回一个整数而不是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()
方法存在差异,我的解决方案似乎不适用于ZF 1.11.x.
答案 1 :(得分:1)
此问题的已接受答案:How to compare the date parts of two Zend_Date objects?建议以下列方式使用DateTime
代替Zend_Date
(我已根据您的需要修改了代码):
$date1 = new DateTime('2011-11-14');
$date2 = new DateTime('2011-11-10');
$diffDays = $date1->diff($date2)->days;
我已经尝试过,它似乎返回了正确的结果。如果您不是绝对需要使用它,它可能是Zend_Date
的一个很好的替代品。
希望有所帮助,
答案 2 :(得分:1)
我找到解决方案:
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);
}