【问题标题】:Display all data which are between these dates显示这些日期之间的所有数据
【发布时间】:2021-08-26 03:30:55
【问题描述】:

所以目前,我正在尝试显示不在日期 X 和日期 Y 之间的项目列表。 让我们假设 book_date_start = 2021-06-15,并且 bookdate_end = 2021-06-20

这是我当前的查询:

$query->select('fac_query')
->from('facility_booking')
->where('book_date_start', '>=', $newstartdate)
->where('book_date_end', '<=', $newenddate);

所以基于此

$newstartdate = 2021-06-13 and $newenddate = 2021-06-19 (Returns 0 records)
$newstartdate = 2021-06-21 and $newenddate = 2021-06-25 (Returns 0 records)
$newstartdate = 2021-06-11 and $newenddate = 2021-06-12 (Returns 0 records)
$newstartdate = 2021-06-13 and $newenddate = 2021-06-25 (Returns 1 records)
$newstartdate = 2021-06-17 and $newenddate = 2021-06-19 (Returns 0 records)

所以基本上当我写出上述内容时,我意识到我的查询是错误的,因为 2021-06-13 小于 2021-06-15(真),而 2021-06-20 大于 2021 -06-25 (true) 也是,这就是它返回记录的原因。

我的问题: 如果我只想返回记录是选择的日期在 2021-06-15 到 2021-06-20 之间,我将如何编写查询? (我很确定我想多了)但我迷路了。我不需要完整的查询或答案,我只希望有人能指出我稍微正确的方向,我会很高兴的。谢谢大家的阅读。

【问题讨论】:

  • 谢谢!所以我意识到我应该使用 ->whereBetween('book_date_start', [$newstartdate, $newenddate]);这将允许我检查日期的开始是否在此 X 和 Y 日期之间。 (如果是,它将返回记录)。

标签: php sql laravel


【解决方案1】:

尝试如下查询。

$start_date = Carbon::parse($newstartdate)->format('Y-m-d H:i:s');
$end_date = Carbon::parse($newenddate)->format('Y-m-d H:i:s');

$bookinks = \DB::table('facility_booking')->where([['book_date_start','<=',$start_date],['book_date_end','>=',$end_date]])
              ->orwhereBetween('book_date_start',array($start_date,$end_date))
             ->orWhereBetween('book_date_end',array($start_date,$end_date))->get();

【讨论】:

  • 谢谢!这正是我想要的。我想我现在终于明白了,我原来的查询只检查日期是否小于和大于。它没有检查两者之间的任何东西。 (这就是为什么一旦中间有一个日期就会搞砸的原因)。但是使用您的查询,您不仅检查大于和小于,而且还添加了另一个检查以查看它是否也在两个日期之间。天哪,非常感谢你帮助我理解它应该怎么写!!
猜你喜欢
  • 2020-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 2012-11-25
相关资源
最近更新 更多