Eloquent查询次日日期记录时如何排除周六周日?
实现方法
Carbon 原生自带工作日计算方法,不需要手动编写周末判断逻辑,直接调用即可实现跳过周六周日的下一个工作日计算。
日期计算部分
直接使用addWeekday()方法即可,该方法会自动跳过周六、周日,按工作日维度做日期累加:
use Carbon\Carbon; // 加1个工作日,自动跳过周末 $nextWorkday = Carbon::now()->copy()->addWeekday();
方法逻辑说明:
- 当日为周一至周四时,返回自然日+1天的结果,和普通
addDay()效果一致 - 当日为周五时,自动跳过周六、周日,直接返回下周一的日期
- 当日为周六、周日时,会直接返回最近的下周一日期
- 调用
copy()是为了避免修改Carbon原实例,防止后续代码复用原始日期时出现值污染
如果你需要手动实现判断逻辑(比如后续要加节假日跳过规则),可以用周几判断的写法:
$today = Carbon::now(); $nextWorkday = match($today->dayOfWeek) { Carbon::FRIDAY => $today->copy()->addDays(3), Carbon::SATURDAY => $today->copy()->addDays(2), default => $today->copy()->addDay() };
Eloquent 查询写法
根据你数据库中fechaip字段的类型选择对应查询方式即可:
- 如果字段是
date类型(存储格式为YYYY-MM-DD,不带时分秒),先把Carbon实例格式化为对应日期字符串再查询:
$targetDate = $nextWorkday->toDateString(); $results = TuModelo::where('fechaip', $targetDate)->get();
- 如果字段是
datetime/timestamp类型(带时分秒),用whereDate()方法忽略时分秒差异做日期匹配,Eloquent会自动处理Carbon实例的参数绑定:
$results = TuModelo::whereDate('fechaip', $nextWorkday)->get();
注意:如果你的业务需要同时跳过法定节假日,Carbon也支持自定义macro扩展,可以在现有逻辑基础上追加节假日判断规则即可。
内容的提问来源于stack exchange,提问作者Sr. Miyagui
相关产品推荐
相关产品推荐

