根本原因是 php 未配置合法时区,需在 iis 加载的 php.ini 中设置 date.timezone = "asia/shanghai" 并重启 iis;cli 环境需单独配置,同时开启错误显示以确认生效。

Windows IIS10 配置 PHP 8.3.32 时出现时区报错(如 Warning: date(): It is not safe to rely on the system's timezone settings),根本原因是 PHP 没有获取到合法、明确的默认时区。这不是 PHP 8.3.32 的 Bug,而是配置缺失或不一致导致的共性问题。
确认当前时区是否真正生效
新建一个 test-timezone.php 文件,放入网站根目录并访问:
<?php <br> echo "运行时生效时区: " . date_default_timezone_get() . "<br>";<br> echo "php.ini 中配置值: " . ini_get('date.timezone') . "<br>";<br>?>
若第一行输出为空、UTC 或 System/Localtime,第二行为空,说明时区未正确设定。
修改 php.ini 中的 date.timezone
找到 IIS 实际加载的 php.ini 文件(通过 phpinfo() 页面查看 “Loaded Configuration File” 路径):
- 在文件中定位到
[Date]段落 - 取消注释或新增一行:
date.timezone = "Asia/Shanghai" - 必须使用英文双引号包裹,且必须是标准 IANA 时区名(
"Asia/Shanghai"✅,PRC、GMT+8、CST、Asia/Shanghai(无引号)❌) - 保存后,**必须重启 IIS**:以管理员身份运行 CMD,执行
iisreset
补充:CLI 环境也需单独配置
IIS 使用的 PHP 配置和命令行(如 php artisan)往往加载不同 php.ini:
- 运行
php -i | findstr "Loaded Configuration File"查看 CLI 加载路径 - 打开该 php.ini,同样设置
date.timezone = "Asia/Shanghai" - 或更稳妥地,在所有可独立执行的脚本(如定时任务、命令行入口)最顶部加一行:
date_default_timezone_set('Asia/Shanghai');
检查 FastCGI 和错误显示是否干扰判断
有时时区警告被隐藏,导致你以为“没报错”,实则已失效:
- 确保 php.ini 中开启错误显示:
display_errors = On、log_errors = On、error_reporting = E_ALL - IIS 管理器 → 网站 → “错误页” → “编辑功能设置” → 选“详细错误消息”
- 检查 PHP 错误日志(
error_log = "C:\php\logs\php_error.log"),搜索timezone或It is not safe
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











