【问题标题】:Laravel whereDate user timezoneLaravel whereDate 用户时区
【发布时间】:2019-10-19 18:28:11
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

    您可以尝试添加这样的日期范围:

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

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

    我希望这会有所帮助!

    【讨论】:

    • 这个答案是正确的。谢谢@blessing :)
    猜你喜欢
    • 2021-08-28
    • 2018-02-07
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多