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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 02:36:27