我有一个函数可以计算产品列表过期的剩余天数。当我运行下面的代码时,我得到浮点数,例如 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
a 不断获得 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)
如果您想正确使用日期进行计算,您应该使用DateTime
对象。日期(某事的持续时间)之间的差异应该被渲染为一个DateInterval
对象,这给出了确切的差异。