使用两个日期之间的范围获取两列之间的记录,还可以使用搜索筛选条件。

huangapple go评论87阅读模式
英文:

Get records between two columns using range between two dates, Also search filter criteria

问题

  1. **我想要获取在这个日期区间内(2022-02-152022-08-20)加入的记录**
  2. $users = User::whereDate('start_at', '>=', $startDate)
  3. ->whereDate('end_at', '<=', $endDate)
  4. ->get();
英文:

I want to get records that are joined between this date period (2022-02-15, 2022-08-20)

  1. $users = User::whereDate(&#39;start_at&#39;, &#39;&gt;=&#39;, $startDate)
  2. -&gt;whereDate(&#39;end_at&#39;, &#39;&lt;=&#39;, $endDate)
  3. -&gt;get();

答案1

得分: 1

您可以使用Laravel的whereBetween函数:

  1. $users = User::whereBetween('start_at', [ $startDate, $endDate])->get();

注意 $startDate$endDate必须是Carbon的实例。

  1. $startDate = new Carbon('paste_your_start_date')->format('Y-m-d')." 00:00:00";

更新

这是从两个分开的列获取数据的一种方法。示例未经测试。

  1. $start_at = Carbon::createFromFormat('Y-m-d H', '2022-02-15 0')->toDateString();
  2. $end_at = Carbon::createFromFormat('Y-m-d H', '2022-08-20 0')->toDateString();
  3. $users = User::whereRaw("start_at <= date('$start_at')")
  4. ->whereRaw("end_at >= date('$end_at')")
  5. ->get();
英文:

You can use the whereBetween Laravel function:

  1. $users = User::whereBetween(&#39;start_at&#39;, [ $startDate, $endDate])-&gt;get();

Note $startDate and $endDate must be instance of Carbon.

  1. $startDate = new Carbon(&#39;paste_your_start_date&#39;)-&gt;format(&#39;Y-m-d&#39;).&quot; 00:00:00&quot;;

Update

This would be one method to get data from two seperated columns. Example is not tested.

  1. $start_at = Carbon::createFromFormat(&#39;Y-m-d H&#39;, &#39;2022-02-15 0&#39;)-&gt;toDateString();
  2. $end_at = Carbon::createFromFormat(&#39;Y-m-d H&#39;, &#39;2022-08-20 0&#39;)-&gt;toDateString();
  3. $users = User::whereRaw(&quot;start_at &lt;= date(&#39;$start_at&#39;)&quot;)
  4. -&gt;whereRaw(&quot;end_at &gt;= date(&#39;$end_at&#39;)&quot;)
  5. -&gt;get();

答案2

得分: 1

Sure, here is the translated code:

  1. $_start_date = '2022-02-15';
  2. $_end_date = '2022-08-20';
  3. $users = User::where(function ($query) use ($_start_date, $_end_date) {
  4. $query->where(function ($query) use ($_start_date, $_end_date) {
  5. $query->whereRaw("start_date >= date('$_start_date')")
  6. ->whereRaw("end_date <= date('$_end_date')");
  7. })
  8. ->orWhere(function ($query) use ($_start_date, $_end_date) {
  9. $query->whereRaw("start_date <= date('$_start_date')")
  10. ->whereRaw("end_date >= date('$_end_date')");
  11. });
  12. })->get();

This code filters the users based on the date range specified by $_start_date and $_end_date. The whereRaw method is used to construct raw SQL queries for date comparisons within the specified range.

英文:
  1. $_start_date = &#39;2022-02-15&#39;;
  2. $_end_date =&#39;2022-08-20&#39;;
  3. $users = User::where(function ($query) use ($_start_date, $_end_date) {
  4. $query-&gt;where(function ($query) use ($_start_date, $_end_date) {
  5. $query-&gt;whereRaw(&quot;start_date &gt;= date(&#39;$_start_date&#39;)&quot;)
  6. -&gt;whereRaw(&quot;end_date &lt;= date(&#39;$_end_date&#39;)&quot;);
  7. })
  8. -&gt;orwhere(function ($query) use ($_start_date, $_end_date) {
  9. $query-&gt;whereRaw(&quot;start_date &lt;= date(&#39;$_start_date&#39;)&quot;)
  10. -&gt;whereRaw(&quot;end_date &gt;= date(&#39;$_end_date&#39;)&quot;);
  11. });
  12. })-&gt;get();

try above code this will also return between dates of start_date and end _date e.g below

  1. $_start_date = &#39;2022-02-18&#39;;
  2. $_end_date =&#39;2022-08-20&#39;;

and also works with below dates e.g

  1. $_start_date = &#39;2022-02-16&#39;;
  2. $_end_date =&#39;2022-08-18&#39;;

codes look like this in ide
使用两个日期之间的范围获取两列之间的记录,还可以使用搜索筛选条件。

答案3

得分: 0

  1. 根据你的具体需求而定
  2. User::whereDate('start_date', '>=', $startDate)->where('end_date', '<=', $endDate)->get();
  3. 或者
  4. User::whereDate('start_date', '<', $User)->whereDate('end_date', '>', $startDate)->get();
英文:

Depends on what you need exactly

  1. User::whereDate(&#39;start_date&#39;, &#39;&gt;=&#39;, $startDate)-&gt;where(&#39;end_date&#39;, &#39;&lt;=&#39;, $endDate)-&gt;get();

or

  1. User::whereDate(&#39;start_date&#39;, &#39;&lt;&#39;, $User)-&gt;whereDate(&#39;end_date&#39;, &#39;&gt;&#39;, $startDate)-&gt;get();

答案4

得分: 0

我认为您想要获取从start_dateend_date之间至少存在一天的记录,这些记录存在于2022年2月15日到2022年8月20日之间:

  1. $startDate = '2022-02-15';
  2. $endDate = '2022-08-20';
  3. $users = User::whereDate('start_at', '<=', $endDate)
  4. ->whereDate('end_at', '>=', $startDate)
  5. ->get();
英文:

I think you want to get the records that at least one day from start_date to end_date that exists between 2022-02-15 and 2022-08-20:

  1. $startDate = &#39;2022-02-15&#39;;
  2. $endDate = &#39;2022-08-20&#39;;
  3. $users = User::whereDate(&#39;start_at&#39;, &#39;&lt;=&#39;, $endDate) // where or whereDate also should work
  4. -&gt;whereDate(&#39;end_at&#39;, &#39;&gt;=&#39;, $startDate)
  5. -&gt;get();

huangapple
  • 本文由 发表于 2023年2月8日 21:57:15
  • 转载请务必保留本文链接:https://go.coder-hub.com/75386834.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定