PHP 未设置 date.timezone 会导致时间函数警告,需通过 php --ini 定位 php.ini 并在 [Date] 段下配置 date.timezone = Asia/Shanghai,修改后重启 Web 服务,或用 date_default_timezone_set() 等临时方案。

PHP 下载安装后,date.timezone 未设置会导致 strtotime()、date() 等函数抛出警告(如 Warning: date(): It is not safe to rely on the system's timezone settings),必须显式配置时区,不能依赖系统默认。
怎么确认 PHP 是否已安装并找到 php.ini 文件
先验证 PHP 是否可用,并定位配置文件位置:
- 终端执行
php -v确认安装成功 - 运行
php --ini查看加载的php.ini路径(注意输出中Loaded Configuration File行) - 若显示
none,说明用的是默认内置配置,需手动创建或复制模板;常见路径包括:/etc/php/8.1/apache2/php.ini(Debian/Ubuntu)、/usr/local/etc/php/8.2/php.ini(macOS Homebrew)、C:\php\php.ini(Windows) - Windows 用户注意:安装包通常附带
php.ini-development和php.ini-production,需重命名为php.ini并选择其一使用
在 php.ini 中设置 date.timezone 的正确写法
编辑找到的 php.ini 文件,在 [Date] 段落下添加或修改这一行(不要加引号,大小写敏感):
date.timezone = Asia/Shanghai
常见合法值示例:
立即学习“PHP免费学习笔记(深入)”;
-
Asia/Shanghai(中国大陆标准时间,推荐) -
Asia/Chongqing(等效于 Shanghai,但已不推荐) -
Europe/Berlin、America/New_York、UTC - 禁止使用缩写如
GMT+8、CST、PST—— 这些不是 IANA 时区标识符,PHP 会静默忽略或报错 - 修改后必须重启 Web 服务(如
sudo systemctl restart apache2或sudo brew services restart php),CLI 模式下无需重启,但需确保下次运行用的是新配置
如果无法修改 php.ini,有哪些临时替代方案
某些共享主机或容器环境不允许改全局配置,可考虑以下方法,但注意优先级和适用范围:
- 脚本开头调用
date_default_timezone_set('Asia/Shanghai')—— 仅对当前请求有效,且必须在任何date()/strtotime()前执行 - Apache 的
.htaccess中加:php_value date.timezone "Asia/Shanghai"(需AllowOverride All且 PHP 为模块模式) - PHP-FPM 池配置中设:
php_admin_value[date.timezone] = Asia/Shanghai(更安全,管理员级覆盖) -
环境变量方式(不推荐):
export TZ=Asia/Shanghai对 CLI 有效,但对 Web SAPI 无效,且不被date()函数识别
真正生效的判断依据只有一个:运行 php -r "echo date_default_timezone_get();" 输出你设的值。别信“改了就完事”,很多问题出在改了错误的 php.ini 文件,或者没重启服务,或者用了 CLI 和 Web 两套不同配置。











