gpt4 book ai didi

Laravel 的 whereBetween 不包括日期

转载 作者:行者123 更新时间:2023-12-02 13:42:30 26 4
gpt4 key购买 nike

注意:代码应该适用于 postgres 和 mysql。

我想通过 date_fromdate_to 查询表。假设有一个日期范围,格式为:('d-m-Y')

Foo:

[
{'id': 1, "created_at": "2017-05-20 11:18:00"},
{'id': 2, "created_at": "2017-05-24 11:38:36"}
]

代码:

$format = 'd-m-Y';
$df = $request->input('date_from');
$dt = $request->input('date_to');
$date_from = Carbon::createFromFormat($format, $df);
$date_to = Carbon::createFromFormat($format, $dt);

Foo::whereBetween('created_at', [$date_from, $date_to])->get()->toArray();

当我查询 date_from = '20-05-2017'date_to = '20-05-2017' 时,我看到一个空数组。无论如何,我希望看到 20-05-2017 Foo。如果我 date_from = '19-05-2017'date_to = '21-05-2017',我会看到 20-05-2017的数组。

whereBetween 有什么问题吗?

最佳答案

它正在按预期工作。您遇到的问题主要是您要求完全相同的时间戳之间的时间。虽然您只指定了特定的日期而不是时间,但其中包含了时间。在这种情况下,很可能正好是午夜。因此,'20-05-2017' 变为 '20-05-2017 00:00:00'。在这种情况下,除了满足您的 whereBetween 调用的确切时间之外,没有任何时间。

如果您想获取特定日期的记录,最简单的解决方案是使用:

$query->whereRaw('date(created_at) = ?', [date('Y-m-d')]);

如果您希望在两个不同日期之间进行查询,您当前的方法将有效。

如果您希望开始时间是一天的开始,结束时间是一天的结束,您可以使用 Carbon 的 modifiers对于此 startOfDayendOfDay:

$date_from = Carbon::parse($request->input('date_from'))->startOfDay();
$date_to = Carbon::parse($request->input('date_to'))->endOfDay();

$result = Foo::whereDate('created_at', '>=', $date_from)
->whereDate('created_at', '<=', $date_to)
->get()
->toArray();

关于Laravel 的 whereBetween 不包括日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44158949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com