【问题标题】:Eloquent / DB get months between two datesEloquent / DB 在两个日期之间获得月份
【发布时间】:2017-09-11 18:08:41
【问题描述】:

我正在使用 Laravel 5.4。

我有一个 Booking 模型,其中包含 start_date 和 end_date。用户从下拉列表中选择月份。

我希望Eloquent 返回月份在start_date 和end_date 边界之间的所有记录。

例如,显示 9 月的所有预订(即使预订在 9 月之前(或 9 月期间)开始且(布尔值)在 9 月或更晚结束。

欢迎提出任何建议。如果需要,很高兴这是一个原始的 SQL 语句。

【问题讨论】:

标签: sql laravel date


【解决方案1】:

这对我有用:

$start = Carbon::now()->addMonth(-1);
$end = Carbon::now()->addMonth();

$bookings = Booking::whereRaw('MONTH(created_at) > :0 AND MONTH(created_at) < :1',[
    $start->month, $end->month
])
->orWhereRaw('MONTH(created_at) = :3 AND DAYOFMONTH(created_at) >= :4', [ 
    $start->month, $start->day
])
->orWhereRaw('MONTH(created_at) = :5 AND DAYOFMONTH(created_at) <= :6', [
    $end->month, $end->day
])
->get();

如果您想排除开始和结束日期,您可以将&gt;= 替换为&gt;,将&lt;= 替换为&lt;。

当然,您必须更改 $start 和 $end 日期。它们应该是Carbon\Carbon 对象。

【讨论】:

  • 工厂。谢谢。
  • @Ows 如果这篇文章回答了您的问题请您将其标记为已接受 :) 谢谢。
【解决方案2】:

首先,在客户端或服务器端将用户选择的月份解析为:

$selected = "2017-09";

然后:

Booking::where([
    ['start_time','>', $selected],
    ['end_time','<', $selected]
])->get()

【讨论】:

  • 感谢您的帮助 - 我稍后会玩这个!
【解决方案3】:

这似乎有效:

$bookings = DB::table('bookings')
            ->whereMonth('start_date', '<', $date->month)->whereMonth('end_date', '>=', $date->month)
            ->orWhere(function($query) use ($date) {
                $query->whereMonth('start_date', $date->month);
            })->get();

【讨论】:

    【解决方案4】:

    应该很简单。

    我不确定“月份”的格式,但您应该使用 DateTime::createFromFormat() 来获取您的 DateTime 对象。如果您熟悉,请随意使用Carbon。我发现像这样简单的事情,它增加了不必要的复杂性。

    然后使用它进行查询。

    Booking::whereBetween($dateTime->format('Y-m-00'), [DB::raw('start_date'), DB::raw('end_date')])->get();
    

    【讨论】:

      【解决方案5】:

      添加一些解释:

      Booking::whereRaw("(start_date, end_date) overlaps (date '2021-06-01', date '2021-06-30')")->get();
      

      【讨论】:

      • 请解释您的答案或分享一些文档链接
      • "添加一些解释:"请这样做。我目前在您的帖子中没有看到任何解释。
      猜你喜欢
      • 2015-11-29
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多