如何使用PHP / CodeIgniter 4在正确的时区中显示MySQL时间戳

vdzxcuhz  于 2023-03-21  发布在  PHP
关注(0)|答案(1)|浏览(120)

我有一个CodeIgniter 4应用程序,它从MySQL数据库中读取时间戳,我希望它以不同于UTC的本地时区显示,比方说欧洲/马德里(UTC+2或UTC+1,取决于夏令时)。
问题是,我的本地服务器测试是在欧洲/马德里(目前是UTC+1),而我的生产服务器是在UTC和它是一个共享主机,所以我想我不能改变它的时区。
所以select now()返回不同的时区,在本地环境中是我的本地时间,但在生产环境中少了一个小时。
问题是,当我从MySQL读取时间戳时,本地服务器返回的是UTC+1,而生产服务器返回的是UTC +1,我希望它总是以UTC+1显示。
因此,直接显示echo $mytimestamp在本地服务器上可以工作,但在生产中会给出错误的时间。
我找到的唯一解决方案是这样做:

(new DateTime($mytimestamp, new DateTimeZone('UTC')))->setTimezone(new DateTimeZone('Europe/Madrid'))->format('d-m-Y H:i')

也许代码可以简化,但这基本上是创建一个PHP DateTime,假设它是UTC,并要求将其更改为欧洲/马德里(UTC+1)。
这样,在生产中显示正确的时间,但现在在localhost中时间提前一个小时,这不是一个大问题,但这让我想到,如果共享主机突然从UTC更改为另一个(或者如果我迁移到另一个服务器),时间将不正确。
所以,简单地说,我发现了一个技巧,可以在适当的时区显示MySQL的时间戳,但它的良好工作取决于服务器的时间。
有没有更好的解决方案来显示我的本地时间的时间戳,考虑到服务器/MySQL的时间?
请注意,这是一个共享主机,SET GLOBAL time_zone = 'Europe/Madrid'不工作(没有足够的权限),而为会话SET time_zone = 'Europe/Madrid'更改它会导致#1298 - Unknown or incorrect time zone: 'Europe/Madrid'错误。
非常感谢。

elcex8rz

elcex8rz1#

在CodeIgniter 4中,编辑**\Config\App.php并更改$appTimezone**的值(默认值为UTC)。

public string $appTimezone = 'Europe/Madrid';

您可以随时回显此值:

echo app_timezone();

相关问题