You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Carbon日期范围比较异常:目标日期在区间却返回nok

问题原因及解决方案

核心原因

你遇到的问题本质是时间部分的比较被忽略:

  • 调用firstOfMonth()时,Carbon默认会将时间设置为00:00:00,所以$firstDayOfPreviousMonth的值是2024-02-01 00:00:00。
  • 随后调用copy()->lastOfMonth(),lastOfMonth()默认参数也是00:00:00,因此$lastDayOfPreviousMonth实际是2024-02-29 00:00:00。
  • 而你的$carbonSubmissionTime对应的是2024-02-29 10:27:03(UTC时区),这个时间晚于2024-02-29 00:00:00,导致lte()判断不成立,最终输出nok。

修复方案

你需要把上月最后一天的时间设置为当日的结束时刻,有两种简单方式:

方式1:使用endOfMonth()方法

endOfMonth()会直接将时间设置为当月最后一天的23:59:59.999999,完美覆盖当日所有时间点:

$lastDayOfPreviousMonth = $firstDayOfPreviousMonth->copy()->endOfMonth();

方式2:给lastOfMonth()指定时间参数

手动传入23:59:59作为lastOfMonth()的参数,将时间设置为当日最后一秒:

$lastDayOfPreviousMonth = $firstDayOfPreviousMonth->copy()->lastOfMonth('23:59:59');

修改后,$lastDayOfPreviousMonth会变成2024-02-29 23:59:59(或更精确的毫秒级结束时间),此时$carbonSubmissionTime的10:27:03会满足区间条件,输出ok。

另外,如果你使用betweenIncluded()或between($start, $end, true),只要边界时间设置正确,也能得到预期结果。


内容的提问来源于stack exchange,提问作者executable

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:42:35