PHP实现首日之后100天日增0.25费用的代码纠错
需求说明
需要实现的费用计算规则:自首日之后开始,100天周期内费用按每日0.25的幅度递增。
原实现代码存在逻辑错误,无法正确计算结果,原代码如下:
$startday = new DateTime('2022-06-22'); $today = new DateTime(); $days = $today->diff($startday)->format('%a'); echo $value = 100 + $days * 025;
问题排查
原代码一共存在3处错误:
- 数值格式错误:
025是PHP的八进制数值写法,对应十进制值21,并非预期的递增幅度0.25,直接导致计算结果完全偏离预期 - 未匹配「首日不递增」规则:原逻辑直接用总间隔天数做递增计算,没有做边界处理,遇到起始日期晚于当前日期的异常场景会直接算出负数费用
- 未匹配「100天周期」规则:原逻辑没有设置递增天数上限,超过100天后费用会持续上涨,不符合规则要求
修正后代码
$startday = new DateTime('2022-06-22'); $today = new DateTime(); $totalPassedDays = $today->diff($startday)->format('%a'); // 计算有效递增天数:首日不递增,超过100天周期后不再递增 $effectiveDays = max(0, min(100, $totalPassedDays)); $value = 100 + $effectiveDays * 0.25; echo $value;
逻辑说明
- 用
max(0, $totalPassedDays)做异常兜底:如果起始日期晚于当前日期,有效递增天数按0计算,费用取基础值100,不会出现低于基础值的异常结果 - 用
min(100, $totalPassedDays)匹配周期规则:距离起始日超过100天后,有效递增天数固定为100,费用封顶为125,不再持续上涨 - 修正了数值写法错误,将八进制写法
025替换为正确的浮点数值0.25
内容的提问来源于stack exchange,提问作者Sem
相关产品推荐
相关产品推荐

