php 如何在Laravel中获取当前日期的数据

iyfjxgzm  于 2023-04-19  发布在  PHP
关注(0)|答案(7)|浏览(112)

我想从Laravel的数据库中检索今天的数据。
我已经在谷歌上搜索并应用了几种方法,但没有得到我的答案。

PrescriptionTbl::whereDate('created_at', '=', $today)->get();

其中PrescriptionTbl是模型,today是当前日期,类似于2019-2-19。但得到NULL数组。
为了检查SQL,我使用了toSQL()而不是get() ......它在浏览器中显示在SQL下面

select * from `prescription_tbls` where date(`created_at`) = ?

我还使用了Carbon,但也得到了一个NULL数组

PrescriptionTbl::whereDate('created_at', Carbon::today())->get();

如何解决?有谁帮忙吗?

x4shl7ld

x4shl7ld1#

你可以用它

PrescriptionTbl::whereDate('created_at', date('Y-m-d'))->get();
oyjwcjzk

oyjwcjzk2#

可以通过new DateTime()类获取

PrescriptionTbl::whereDate('created_at', '=', (new DateTime)->format('Y-m-d'))->get();
wh6knrhe

wh6knrhe3#

使用(使用碳\碳;)简单又漂亮

PrescriptionTbl::whereDate('created_at',  Carbon::today()->toDateString())->get();
ss2ws0br

ss2ws0br4#

你可以试试这个:

PrescriptionTbl::where('created_at', '<=', date('Y-m-d 00:00:00'))->get();
byqmnocz

byqmnocz5#

created_at是一个时间戳,它是日期/时间格式,所以,除非你提供了整个时间戳,否则等号运算符将不起作用。
您可以使用whereDate方法来比较日期,仅如文档中所述

PrescriptionTbl::whereDate('created_at', $today)->get();
vzgqcmou

vzgqcmou6#

您可以使用whereBetween,其中您可以提供今天的开始日期为2019-01-01 00:00:00,结束日期为2019-01-01 23:59:59
供参考How to query between two dates using Laravel and Eloquent ORM?

w6lpcovy

w6lpcovy7#

另一种获取今天交易的确切记录的方法是使用like操作符与Carbon结合使用,例如在Laravel 9+中:

<?php

$date = Carbon::now();

    $todaySales = Sales::query()
        ->where("created_at", "like", "%{$date->today()->toDateString()}%")
        ->get();

    dd($todaySales);

上面的代码将返回今天的记录数组。
现在我们为什么要使用这种方法呢?我想让你好好看看created_at列字段,它看起来是这样的:2023-04-14 11:33:23。使用where语句,结果将是一个空数组为什么?因为where语句默认使用=运算符,这意味着sql语句将尝试完全匹配记录。查询如下所示:

SELECT * FROM sales WHERE created_at={$todaysDate}
// in this case todays date is 2023-04-14 
// but the value in the database is rather containing time 
// e.g.: 023-04-14 11:33:23 so definitely the select operation will fail and return empty results.

看看上面的查询,sql查询不可能计算出任何结果,但是使用like运算符,sql查询将尝试搜索其中包含今天日期的记录:2023-04-14,它将返回今天的所有记录。如果你想从一个范围内检索记录,比如从周一到周五,你可以使用Laravel whereBetween()方法,否则试试这种方法。希望这能帮助你解决这个问题。
您也可以查看this article以了解更多信息

相关问题