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

Docker部署Laravel+Nginx服务器时区异常:返回数据为UTC+0

Laravel+Docker 时区问题:数据库存储为莫斯科时区,但接口返回UTC+0

我在Docker中部署了Laravel+Nginx服务器,MariaDB数据库单独部署在同一服务器上,已将数据库设置为莫斯科时区(这是我需要的正确时区),数据存储正常,但从服务器返回的数据却是UTC+0时区。

已配置项

数据库配置(config/database.php)

'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'timezone' => '+3:00',
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

应用配置(config/app.php)

'timezone' => env('APP_TIMEZONE', 'Europe/Moscow'),

PHP配置(php.ini)

cgi.fix_pathinfo=0
max_execution_time = 1000
max_input_time = 1000
memory_limit=4G
date.timezone = "Europe/Moscow"

排查与解决步骤

  1. 验证环境变量加载
    检查.env文件是否添加APP_TIMEZONE=Europe/Moscow,进入Laravel容器执行php artisan tinker,分别输入date_default_timezone_get()和config('app.timezone'),确认返回值为Europe/Moscow。

  2. 修正数据库时区配置
    将数据库配置中的timezone值从'+3:00'改为'Europe/Moscow',使用时区标识符而非固定偏移量,避免夏令时切换导致的时区偏差。修改后配置:

    'timezone' => 'Europe/Moscow',
    
  3. 检查模型日期转换规则
    查看Laravel模型中的$casts属性,确保没有强制将日期字段转换为UTC格式。例如避免:

    protected $casts = [
        'created_at' => 'datetime:UTC',
        'updated_at' => 'datetime:UTC',
    ];
    

    如需统一返回莫斯科时区的日期格式,可在模型中添加:

    protected function serializeDate(DateTimeInterface $date)
    {
        return $date->format('Y-m-d H:i:s');
    }
    
  4. 同步Docker容器系统时区
    进入Laravel容器执行date命令,确认系统时区为莫斯科时区。若不是,在Dockerfile中添加时区设置:

    RUN ln -snf /usr/share/zoneinfo/Europe/Moscow /etc/localtime && echo Europe/Moscow > /etc/timezone
    

    重新构建并启动容器。

  5. 清除配置缓存
    在Laravel容器内执行以下命令,确保新配置生效:

    php artisan config:clear
    php artisan cache:clear
    

内容的提问来源于stack exchange,提问作者Даниил Чернюк

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:20:28