Laravel 雄辩,其中日期等于或大于 DateTime

Posted

技术标签:

【中文标题】Laravel 雄辩,其中日期等于或大于 DateTime【英文标题】:Laravel eloquent where date is equal or greater than DateTime 【发布时间】:2017-10-31 04:05:27 【问题描述】:

我正在尝试从日期列高于或等于当前时间的模型中获取关系数据。

日期列的格式如下:Y-m-d H:i:s

我要做的是获取 Y-m-d H:i:s 未来所在的所有行。

示例:假设日期是 2017-06-01,时间是 09:00:00 然后我想得到日期在未来的所有行,时间在未来。

目前我的代码看起来像这样,它几乎可以工作,但它没有抓取日期为当天的行。

public function customerCardFollowups() 
    return $this -> hasMany('App\CustomerCardFollowup', 'user_id') -> whereDate('date', '>', Carbon::now('Europe/Stockholm')) -> orderBy('date', 'asc') -> take(20);

我做错了什么? 提前致谢。

【问题讨论】:

如果您想在支票中考虑时间,请使用where 而不是whereDate,使用>= 而不是> 我会试试的。谢谢 似乎只使用“where”来修复它。谢谢! 那是因为whereDate只会使用值的日期部分而忽略时间。 【参考方案1】:

听起来你需要使用>=,例如:

->whereDate('date', '>=', Carbon::now('Europe/Stockholm'))

【讨论】:

我也试过了,但到最后好像还不行。例如,如果日期是正确的,但时间超过了日期列的时间,则不应获取它。只应获取尚未过去的日期(包括时间)。 @Kaizokupuffball 你修好了吗?我有同样的问题,只用where 代替whereDate 这只会比较日期(2020-08-07)而忽略时间部分(12:15:09)。 此解决方案将忽略时间,并在提出的问题中返回同一天 2017-06-01 09:00 之前的记录。您可以在此处查看我的答案以在比较中包含时间:***.com/a/69687327/4332391【参考方案2】:

你可以在这里使用:

->where('date', '>=', date('Y-m-d'))

【讨论】:

【参考方案3】:

对于 Laravel 的测试用例:

$this->assertDatabaseHas('my_table', [
    'name' => $name,
    [ 'updated_at', '>=', $updatedAt ] // $updatedAt is a Carbon object
]);

【讨论】:

【参考方案4】:

使用whereDate仅比较日期而忽略时间。因此,您的解决方案将给出至少在一天后约会的记录,并且将不包括在同一天但更晚时间的记录。

如果您按照其他答案中的建议使用>=,您将获得从当前日期开始的记录以及甚至在确定时间之前的记录。

对此的一个解决方案是比较使用whereRaw 中的 mysql 函数。在您的代码中,日期的条件将如下所示:

-> whereRaw("date > STR_TO_DATE(?, '%Y-%m-%d %H:%i:%s')" , Carbon::now('Europe/Stockholm')->format('Y-m-d H:i'));

在代码中,我更改了 Carbon 日期的格式以匹配特定格式,您可以使用您想要的任何格式并将相同的格式放入 STR_TO_DATE 函数中。

【讨论】:

这对我有用,谢谢 很高兴听到这个消息。

以上是关于Laravel 雄辩,其中日期等于或大于 DateTime的主要内容,如果未能解决你的问题,请参考以下文章

雄辩的倍数 where from date fields <= >=

之后:日期不接受 Laravel 表单验证中的相同日期?

结束日期必须等于并大于引导程序中的开始选定日期

Laravel 雄辩的查询 WhereNotIn 与 WhereNotNull

雄辩 - 不等于

sql这个语句怎么写条件,小于2010-4-1的订单日期