如何查询用户时区的结果?
我所有用户都有一个timezone
属性,例如:
Auth::user()->timezone; // America/Toronto
应用配置时区和数据库时区设置为 UTC。每个用户可以有不同的时区。问题是我正在尝试过滤today
记录,它也给了我昨天的结果:
$query->whereDate($column, Carbon::now())
我知道这是因为偏移量。我试过使用它,这没有区别:
$query->whereDate($column, Carbon::now()->tz(Auth::user()->timezone)
如何使用 UTC 根据数据库值获取用户时区中当天的正确结果?
您可以尝试添加如下日期范围:
$query->whereDate($column, ">=", Carbon::now()->startOfDay()->tz(Auth::user()->timezone)
->whereDate($column, "<=", Carbon::now()->endOfDay()->tz(Auth::user()->timezone);
这里的关键是使用默认时区确定当天的开始和结束,然后将这些时间戳转换为当前用户的时区。
我希望这有帮助!