Php 处理将现有laravel应用程序从本地时区转换为UTC的最佳方法

Php 处理将现有laravel应用程序从本地时区转换为UTC的最佳方法,php,mysql,laravel,datetime,timezone,Php,Mysql,Laravel,Datetime,Timezone,目前,在我们的Laravel应用程序中,时区设置如下 'timezone' => env('TIMEZONE', 'Europe/London'), MySQL数据库中的所有DateTime和timestamps字段也存储在Europe/London时区中 我们的应用程序现在将切换到UTC,但是,如果我们将应用程序中的时区更改为UTC,那么由于BST目前只有一个小时的时间,我们现有的所有基础设施都将中断 将中断的内容包括使用时间字段的现有查询,因为它们将与数据库中的记录不同步一小时 我

目前,在我们的Laravel应用程序中,时区设置如下

 'timezone' => env('TIMEZONE', 'Europe/London'),
MySQL数据库中的所有
DateTime
timestamps
字段也存储在
Europe/London
时区中

我们的应用程序现在将切换到
UTC
,但是,如果我们将应用程序中的
时区更改为
UTC
,那么由于
BST
目前只有一个小时的时间,我们现有的所有基础设施都将中断

将中断的内容包括使用时间字段的现有查询,因为它们将与数据库中的记录不同步一小时

我们在查询中使用系统时间的示例如下

Task::where('expired', '=', false)->where('expires_at', '<', Carbon::now())->get();

Task::where('expired','=',false)->where('expires_at','不能说明列表中的第一项,下面是我对第二项的看法。实际上,有很多时区您应该注意:默认的php时区(来自php.ini的)、服务器时区(好吧,如果php.ini时区为空,它会返回到服务器上的时区)、mysql的时区、部署mysql实例的服务器时区、您当前所在的时区、用户的时区,更不用说像mysql连接时区这样的开放性事物了

话虽如此,如果你不想有一个非常有趣的时间调试花哨的错误,你希望所有的系统时区都是一样的。实际上,它到底是什么并不重要。更重要的是,你知道它们中的每一个,并且知道它们如何应用于你的情况。让你所有的系统时区都成为UTC更可预测、更独特萨尔,更常见

但如果我是你的话,我会保持基础设施时区设置不变。我怀疑你会从这一举措中获得任何切实的好处。在前端转换日期时间实际上是处理这类事情的一种常见方式。例如,在postgres中,可以将时区与日期时间一起保存,但这几乎毫无用处,因为它是c转换为系统时区。因此,当我需要向客户端输出日期时间时,我会编写如下内容

(new AdjustedAccordingToTimeZone(
    new FromISO8601('2018-04-25 15:08:01+00:00'),
    new Moscow()
))
    ->value();
关于你的第三个问题,quick Google向我指出。因此,如果你查询几行,每行都有自己的时区,你可以随时将这些日期转换为你想要的任何时区