frankenphp 1.2 不额外管理时区,需在 php 层统一设置:首选在入口文件(如 index.php、worker.php)顶部调用 date_default_timezone_set('asia/shanghai'),或配置 php.ini 的 date.timezone;务必验证生效,worker 模式下 worker.php 同样需设置。

FrankenPHP 1.2 本身不额外管理 PHP 时区,它复用标准 PHP 的时区机制。要避免时间错误,关键是在 PHP 层正确、统一地设置时区,而不是依赖 FrankenPHP 特有配置。
在入口脚本中调用 date_default_timezone_set()
这是最推荐、最可控的方式,适用于所有环境(包括 FrankenPHP):
- 在项目主入口文件(如 public/index.php 或 worker.php)的最顶部添加:
- 确保该行在任何使用
date()、new DateTime()等函数之前执行; - 不要写成
'PRC'或'UTC+8'—— 这些非标准标识符在新版 PHP 中可能失效或触发警告; - 若服务面向多时区用户,此处仍设为统一基准时区(如
'UTC'),再在展示层按需转换。
修改 php.ini 中的 date.timezone
如果你能控制 FrankenPHP 启动所用的 PHP 配置(例如通过 Caddyfile 指定 php.ini 路径),可全局生效:
- 找到实际被加载的
php.ini(运行phpinfo()查看“Loaded Configuration File”); - 取消注释并设置:
- FrankenPHP 不需要重启,但 PHP 进程需重新加载配置(通常意味着重启整个 FrankenPHP 实例或 Caddy 服务);
- 该设置优先级低于
date_default_timezone_set(),即代码中显式调用会覆盖 ini 设置。
验证是否生效
加一段调试代码确认当前时区已正确应用:
echo date_default_timezone_get(); // 应输出 Asia/Shanghaiecho date('Y-m-d H:i:s'); // 检查是否为预期北京时间
echo gmdate('Y-m-d H:i:s'); // 对比 UTC 时间,应相差 8 小时
- 如果
date_default_timezone_get()返回UTC,说明未成功设置,需检查调用位置或 ini 文件路径; - 注意:FrankenPHP 默认不修改 PHP 的时区行为,它完全遵循底层 PHP 的规则。
特别提醒:Worker 模式下别漏掉 worker.php
FrankenPHP 的 Worker 模式会独立加载 worker.php,这个文件也属于 PHP 执行上下文:
- 务必在
worker.php开头同样调用date_default_timezone_set(); - 否则定时任务、异步队列等在 worker 中生成的时间可能仍是 UTC,导致与主请求时间不一致;
- 建议把时区设置提取为公共引导文件(如
bootstrap/timezone.php),在 index.php 和 worker.php 中都 include。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











