PHP Carbon调用diffInDays传false未返回负数问题求助
问题原因与解决方案
你遇到的问题可以从Carbon diffInDays 方法的规则和调用逻辑两个方向排查:
1. 先明确diffInDays的行为规则
diffInDays的语法为:
$基准日期->diffInDays($比较日期, $absolute = true)
- 第二个参数
$absolute设为false时,返回值的符号逻辑为:如果基准日期早于比较日期返回正数,基准日期晚于比较日期返回负数。 - 你当前的写法是
Carbon::parse($row->date2)->diffInDays(Carbon::parse($row->date1), false),实际计算的是「date1 减去 date2」的天数差:以你给出的示例数据为例,date2是2016-08-23、date1是2016-09-17,基准日期更早,返回正数25,加1后得到26,属于正常返回。
2. 排查返回恒正的常见原因
- 调用顺序不符合预期:如果你需要「date2 减去 date1」的差值(即date2晚于date1时返回负数),把调用顺序反过来即可:
{{ Carbon::parse($row->date1)->diffInDays(Carbon::parse($row->date2), false) + 1 }} - Carbon版本兼容问题:如果调整顺序后依然返回绝对值,可以用时间戳计算的兼容写法,完全规避方法版本问题:
{{ (strtotime($row->date2) - strtotime($row->date1)) / 86400 + 1 }} - 日期格式解析错误:确认你的日期字段存储格式为
Y-m-d,如果是d/m/Y这类格式,需要用Carbon::createFromFormat指定格式解析,避免日期月日部分解析颠倒,导致差值逻辑错误。
内容的提问来源于stack exchange,提问作者NewbieCoder
相关产品推荐
相关产品推荐

