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

Kai*_*all 12 php mysql datetime laravel eloquent

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

日期列格式如下:Ymd H:i:s

我想要做的是抓住Ymd 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);
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?提前致谢.

Ale*_*nin 17

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

->whereDate('date', '>=', Carbon::now('Europe/Stockholm'))
Run Code Online (Sandbox Code Playgroud)

  • 我也试过,但最后似乎没有过去。例如,如果日期是正确的,但时间超过了日期列中的时间,则不应获取它。只应获取尚未过去的日期(包括时间)。 (2认同)
  • @Kaizokupuffball 你修好了吗?我有同样的问题,只用 `where` 而不是 `whereDate` 替换它 (2认同)
  • 这只会比较日期 (2020-08-07),但忽略时间部分 (12:15:09)。 (2认同)
  • 此解决方案将忽略时间,并在提出的问题中返回当天 2017-06-01 09:00 之前的记录。您可以在此处查看我的答案以在比较中包含时间:/sf/answers/4878112921/ (2认同)

Abd*_*ieh 11

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

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

一种解决方案是比较使用whereRaw. 在您的代码中,日期的条件将如下所示:

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

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


小智 8

在这里您可以使用:

->where('date', '>=', date('Y-m-d'))
Run Code Online (Sandbox Code Playgroud)