本文目录导读:

- 修改
php.ini配置文件(全局生效) - 在代码中动态设置(推荐,单个脚本生效)
- 在
.htaccess文件中设置(Apache 专用) - 在
nginx + PHP-FPM中设置 - 如何检查当前时区
- 时区列表获取
- 最佳实践建议
在 PHP 中设置时区,主要有以下 4 种方法,按优先级从低到高排列(高优先级会覆盖低优先级):
修改 php.ini 配置文件(全局生效)
找到 php.ini 文件,搜索 date.timezone:
date.timezone = Asia/Shanghai
常见时区:
- 中国:
Asia/Shanghai或Asia/Chongqing - 台湾:
Asia/Taipei - 香港:
Asia/Hong_Kong - 新加坡:
Asia/Singapore - 日本:
Asia/Tokyo - 美国东部:
America/New_York
修改后需要重启 Web 服务器(Apache/Nginx)或 PHP-FPM 生效。
在代码中动态设置(推荐,单个脚本生效)
date_default_timezone_set('Asia/Shanghai');
echo date('Y-m-d H:i:s'); // 输出北京时间
特点:
- 仅对当前脚本及后续代码生效
- 适合不同用户或不同请求需要不同时区的情况
- 不需要服务器权限
在 .htaccess 文件中设置(Apache 专用)
php_value date.timezone "Asia/Shanghai"
注意: 需要服务器开启了 AllowOverride Options 且 PHP 以 Apache 模块运行。
在 nginx + PHP-FPM 中设置
在 php-fpm.conf 或 /etc/php/8.x/fpm/pool.d/www.conf 中添加:
php_admin_value[date.timezone] = Asia/Shanghai
然后重启 PHP-FPM:
sudo systemctl restart php8.1-fpm
如何检查当前时区
echo date_default_timezone_get(); // 输出当前时区
时区列表获取
查看所有可用时区:
php -r "print_r(timezone_identifiers_list());"
或在 PHP 中输出:
print_r(DateTimeZone::listIdentifiers());
最佳实践建议
- 开发环境: 在
php.ini统一设置 - 生产环境: 如果项目有国际化需求(不同用户时区不同),在每个请求入口(如 index.php)用
date_default_timezone_set()按用户设置 - 框架项目: 大多数框架(Laravel、ThinkPHP 等)都有配置文件可以设置时区,优先使用框架的配置方式
示例(Laravel):
// config/app.php 'timezone' => 'Asia/Shanghai',
只要选择一种适合自己的方式设置一次,后续的 date()、DateTime 类等就会自动使用正确的时区。