我有一个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'
错误。
非常感谢。
1条答案
按热度按时间elcex8rz1#
在CodeIgniter 4中,编辑**\Config\App.php并更改$appTimezone**的值(默认值为UTC)。
您可以随时回显此值: