PHP 设置时区 - 解决时间戳转日期不准确的问题
2021-04-14 更新
整理之前的项目,使用 codeigniter 框架。在用户登录之后会更新以下最后登录时间,数据库里使用了 datetime 存储,查看记录发现,数据库写入的日期 2021-04-14 08:29:07
与当前系统显示的时间(当前东八区时间)相差(慢)了 6 个小时。网上查找资料,回顾了以下 php 中获取和设置时区的函数 date_default_timezone_get()
、date_default_timezone_set()
。
在准备使用设置时区函数(在入口文件中)设置当前时区时,忽然意识到,这个项目之前是不存在这样的问题的。那么是否是本地的 xampp 环境中的时区设置错误了呢?
打开 php.ini
文件,查找生效的 date.timezone
配置项(INI 文件中前面加 ;
表示注释)。发现默认时区显示的是 Europe/Berlin
,将其修改为 Asia/Shanghai
,保存文件,然后重启 apache 服务器。
再次登录后查看,数据库表中的时间显示与系统基本一致。
之前在 php -a
进入交互脚本输出当前日期时出现时间不准确的问题,在服务器上测试也是一样。
这是因为没有设置时区。
PHP 默认时区设置函数为 date_default_timezone_set()
,版本支持:(PHP 5 >= 5.1.0, PHP 7)。
时区参数一般用 大洲/城市 表示时区,有三个表示东八区中国的参数 Asia/Hong_Kong
、Asia/Shanghai
和 Asia/Taipei
。
date_default_timezone_set('PRC');
date_default_timezone_set('Asia/Hong_Kong');
date_default_timezone_set('Asia/Shanghai');
date_default_timezone_set('Asia/Taipei');
还有一种直接跟数字挂钩的写法(格林威治时间):
date_default_timezone_set('Etc/GMT-8');
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。