PHP中的日期相减函数,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); //

}

第二次编辑

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

标签:zend-date,zend-framework,php,date

来源: https://codeday.me/bug/20191202/2085871.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值