You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Nova环境MySQL created_at时间比正确时间早3小时问题求助

Laravel项目created_at字段时间偏移3小时修复方案

排查优先级1:PHP-FPM与CLI时区配置不一致

php -i返回的是PHP命令行(CLI)模式的配置结果,Nova管理面板属于Web请求,运行在PHP-FPM进程下,两者加载完全独立的php.ini文件,是这类问题最常见的漏配点。
修复操作:

  • 在项目public目录下新建临时探针文件,内容为<?php phpinfo();,通过浏览器访问该文件,找到Loaded Configuration File项对应的FPM模式php.ini路径
  • 打开该ini文件,确认date.timezone = Asia/Jerusalem配置存在且未被注释
  • 执行systemctl restart php8.1-fpm重启FPM进程生效,验证完成后立即删除探针文件避免泄露服务器信息

排查优先级2:Laravel配置缓存未更新

修改过config目录下的配置后,如果项目开启了配置缓存,新配置不会自动加载,会持续使用旧的时区配置。
修复操作:
在项目根目录依次执行以下命令清理所有缓存:

php artisan config:clear
php artisan cache:clear
php artisan route:clear
php artisan view:clear

生产环境清理完成后可执行php artisan config:cache重新生成配置缓存提升性能。

排查优先级3:MySQL连接会话时区配置错误

命令行执行select now();返回正确仅代表MySQL服务端全局时区配置正常,Laravel连接MySQL时会独立初始化连接会话的时区,若连接配置未指定时区,会使用会话默认时区,导致写入时间偏移。
修复操作:

  • 打开项目config/database.php,找到mysql连接配置段,补充timezone配置:
    'mysql' => [
        // 保留原有其他配置项
        'timezone' => 'Asia/Jerusalem',
    ],
    
  • 清理配置缓存后,可临时添加路由打印DB::select('SELECT NOW() AS connect_time')[0]->connect_time的返回值,确认数据库连接获取的时间与服务器本地时间一致。

排查优先级4:Nova独立时区配置覆盖

Laravel Nova自带独立时区配置项,优先级高于项目全局时区配置,若未手动修改过该配置,会出现其他场景时间正常、仅Nova操作写入的created_at时间偏移的问题。
修复操作:

  • 打开config/nova.php配置文件,找到timezone配置项,确认值为Asia/Jerusalem
  • 清理视图缓存后重试写入操作验证。

兜底排查项

以上配置均核对无误仍存在问题时,检查两个易漏点:

  • 全局搜索项目代码,确认是否存在date_default_timezone_set()手动调用逻辑,这类硬编码通常写在AppServiceProvider的boot方法、公共中间件、public/index.php入口文件中,会覆盖所有配置文件的时区设置
  • 执行show create table 对应业务表名;核对表结构,若created_at字段为带时区属性的timestamp类型,需确认字段时区属性配置未出现偏移。

内容的提问来源于stack exchange,提问作者HT K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 22:04:04