目前,在我们的 Laravel 应用程序中,我们将时区设置如下。 'timezone' => env('TIMEZONE', 'Europe/London'),我们 MySQL 数据库中的所有DateTime和timestamps字段也存储在Europe/London时区中。我们的应用程序现在将切换到UTC,但是如果我们在我们的应用程序中更改到,目前还有一个小时,我们所有现有的基础设施都会中断BST。TIMEZONEUTC将中断的事情包括我们现有的使用时间字段的查询,因为它们将与数据库中的记录不同步一个小时。下面是我们在系统查询中使用时间的示例Task::where('expired', '=', false)->where('expires_at', '<', Carbon::now())->get();使用上面的代码示例,任务将提前一个小时到期,因为UTC晚了一个小时BST。由于更改为UTC将是系统的根本变化,我希望我能得到以下问题的答案。是否有任何资源概述了将系统从本地时区转换为 UTC 的方法?UTC我应该将所有内容都存储起来,Europe/London然后在前端为用户转换,而不是转换为吗?有什么方法可以轻松查询其中包含多个时区的数据库表?感谢您的帮助,我知道这个问题很难,所以任何能指出我正确方向的东西都将不胜感激。
1 回答
侃侃无极
TA贡献2051条经验 获得超10个赞
不能说你列表中的第一项,这是我对第二项的看法。实际上有很多时区你应该知道:默认的 php 时区(来自 php.ini 的那个),服务器时区(afaik,如果 php.ini 时区是空的,它会回落到服务器的那个),mysql 的时区,部署mysql实例的服务器时区,你当前所在的时区,你用户的时区,更不用说像mysql连接时区这样通俗的东西了。
话虽如此,如果您不想在调试花哨的错误时度过一段愉快的时光,那么您希望所有系统时区都相同。实际上,它到底是什么并不重要。更重要的是,您了解它们中的每一个,并且知道它们如何适用于您的情况。将所有系统时区设置为 UTC 只是更可预测、更通用、更常见。
但如果我是你,我会保留基础设施时区设置不变。我怀疑你从这一举措中获得了什么有形的东西。在前端转换日期时间实际上是处理此类问题的常用方法。例如,在 postgres 中,可以将时区与日期时间一起保存,但它几乎没有用,因为它已转换为系统时区。所以当我需要向客户端输出日期时间时,我会写类似
(new AdjustedAccordingToTimeZone(
new FromISO8601('2018-04-25 15:08:01+00:00'),
new Moscow()
))
->value();
关于你的第三个问题,如果您查询多行,每一行都有自己的时区,您可以随时将这些日期转换为您希望的任何时区。
- 1 回答
- 0 关注
- 202 浏览
添加回答
举报
0/150
提交
取消