Laravel whereDate用户时区

时间:2019-10-19 18:28:11

标签: php laravel eloquent

如何查询用户时区的结果?

我所有的用户都有一个timezone属性,例如:

Auth::user()->timezone; // America/Toronto

应用程序配置时区和数据库时区设置为UTC。每个用户可以具有不同的时区。问题是我正在尝试过滤today的记录,它也提供了昨天的结果:

$query->whereDate($column, Carbon::now())

我知道这是因为偏移。我试过使用这没有什么不同:

$query->whereDate($column, Carbon::now()->tz(Auth::user()->timezone)

如何使用UTC根据数据库值在用户时区中获取当日正确的结果?

1 个答案:

答案 0 :(得分:0)

您可以尝试添加以下日期范围:

$query->whereDate($column, ">=", Carbon::now()->startOfDay()->tz(Auth::user()->timezone)
->whereDate($column, "<=", Carbon::now()->endOfDay()->tz(Auth::user()->timezone);

此处的关键是使用默认时区确定当天的开始和结束,然后将这些时间戳转换为当前用户的时区。

我希望这会有所帮助!