kun*_*put 1 timezone laravel php-carbon
我的默认 Laravel 应用程序时区是America/Los_Angeles (pst),我将所有时间戳存储created_at在数据库中,就像该时区一样。
在用户个人资料中,我们提供了选择时区的选项。在显示数据列表时,例如在旅行列表中,我正在转换并显示根据用户选择的时区创建的数据 ( $date->setTimezone($user->timezone);)
例如,如果行程 ID197将created_at2020-06-11 23:00:00 存储在数据库中(根据默认应用程序时区,即 pst),而在列表中我显示 2020-06-12 02:00:00(EST时区根据用户配置文件提前 3 小时)。
现在一切正常,直到我必须在列表中添加日期范围(开始和结束日期)过滤器。问题是,如果我在过滤器中选择开始日期 2020-10-12,结果它不会获取197行程 id,因为在数据库中它存储为 2020-06-11 23:00:00。,这个 197 id记录应该出现在过滤器之后的列表中,因为根据身份验证用户时区,该行程是在 2020 年 6 月 12 日添加的。我的数据库查询是$trips->whereDate('created_at', '>=' ,$request->start_date);. 我只有日期而不是时间来请求过滤器旅行,我需要以某种方式在此查询中传递时区,或者是否有更好的解决方案。日期过滤器应根据用户选择的时区工作
如果有人遇到类似的问题,以下是我发现的答案一般对于日期范围过滤器,您\xe2\x80\x99会想要确保\xe2\x80\x99将开始日期时间设置为00:00,结束日期时间设置为23:59
\nif($request->filled('start_date'))\n{\n // $request->start_date;\n $date = Carbon::parse($request->start_date, auth()->user()->timezone)\n ->startOfDay()\n ->setTimezone(config('app.timezone'));\n\n $brokers->where('created_at', '>=' ,$date);\n}\n\nif($request->filled('end_date'))\n{\n $end_date = Carbon::parse($request->end_date, auth()->user()->timezone)\n ->endOfDay()\n ->setTimezone(config('app.timezone'));\n $brokers->where('created_at', '<=' ,$end_date);\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1310 次 |
| 最近记录: |