我有一个函数可以计算产品列表到期的剩余天数。当我运行下面的代码时,我得到浮点数,例如3.4722222222222E-5
$days_left = date('d', strtotime($this->expiry_date) - strtotime($date)) / (60 * 60 * 24);
$this->days_left = $days_left;
当我舍入结果时
(round)$this->days_left
一直保持0
答案 0 :(得分:0)
strtotime($this->expiry_date) - strtotime($date)
为您提供以秒为单位的时差。
date('d', $time)
会为您提供$time
的一天部分,删除任何月/年部分。并且你在该数字中划分每天的秒数,这已经是一天数?显然,浮点会导致计算机盲目地进行划分。
相反,抛弃date
函数以获取天数,但将时间(以秒为单位)除以一天中的秒数:
$days_left = (strtotime($this->expiry_date) - strtotime($date)) / (60 * 60 * 24);
并且你没有“输入”到不存在的round
。根据评论,请round($this->days_left)
答案 1 :(得分:0)
如果要正确计算日期,则应使用DateTime
个对象。然后应将日期之间的差异(某事物的持续时间)呈现为DateInterval
对象,这会给出确切的差异。