奇怪的DateTime错误?

时间:2018-03-08 01:38:28

标签: php mysql

我的数据库和PHP代码中的日期时间有一个奇怪的问题。 Carbon::now()目前返回2018-03-08 01:33:47,这是正确的,这是我的计算机和我的国家/地区的时间。

我将expires_at值设为2018-03-08 02:32:02的记录在1小时内(或者您希望成为技术部门的59分钟)。

它没有显示在我的查询中,该查询应该选择expires_at在当前时间之前的所有记录,因此非过期记录。

虽然将日期时间设置为2018-03-09 01:32:28,但它会显示它在23小时后到期?如果我发布任何旧版本(比如当前日期时间后14小时),它将显示为已过期?

$keys = UserAccountKey::where('user_id', Auth::user()->id)
    ->whereDate('expires_at', '>=', Carbon::now())
    ->get();

1 个答案:

答案 0 :(得分:1)

您的查询的SQL是:

select * from `user_account_keys` where date(`expires_at`) >= '2018-03-08 01:33:47'

date('expires_at')获取expires_at字段的日期部分,即' 2018-03-08',显然' 2018-03-08'小于' 2018-03-08 01:33:47',所以你的查询没有得到任何结果。

只需使用where('expires_at', '>=', Carbon::now())

请参阅此演示https://implode.io/vTWTWP