Lumen timezone 时区设置方法(慢了8个小时)
根据 laravel 4.x 和 5.0 的经验, 只需要到 config/app.php 中设置下 ‘timezone' 参数为 ‘prc' 就好了, 找到 lumen 的 config 目录, 在 /vendor/laravel/lumen-framework/config 路径下, 但是 config/app.php 的参数选项中没有 timezone 参数选项, 手动加上后也是无效的。
然后想到 laravel 5 的 .env 文件, 结果发现 lumen 的 .env 文件里也没有关于 timezone 设置的选项。
又回到 config 目录, 看看 config/database.php 中的设置, 关于 mysql 的默认配置如下:
'mysql' => [ 'driver' => 'mysql', 'host' => env('db_host', 'localhost'), 'port' => env('db_port', 3306), 'database' => env('db_database', 'forge'), 'username' => env('db_username', 'forge'), 'password' => env('db_password', ''), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => env('db_prefix', ''), 'timezone' => env('db_timezone','+00:00'), 'strict' => false, ],
在这里有个数据库的 timezone 设置, 默认 +00:00, 也就是 utc 时间, 改成 +08:00 问题解决。由于项目启用了 .env 配置文件, 所以最终是在 .env 文件里添加了一行
db_timezone=+08:00
数据库 timezone 问题解决。
数据库的 timezone 问题虽然解决了, 但是 app 的 timezone 问题还没解决, 全局搜索 lumen 项目, 找用到 timezone 的地方, 在 /vendor/laravel/lumen-framework/src/application.php
文件中找到了初始化 lumen timezone 部分的代码
/** * create a new lumen application instance. * * @param string|null $basepath * @return void */ public function __construct($basepath = null) { date_default_timezone_set(env('app_timezone', 'utc')); $this->basepath = $basepath; $this->bootstrapcontainer(); $this->registererrorhandling(); }
代码中使用的 .env 参数为 app_timezone, 值为 utc, 在这里将 utc 改为 prc, 或者在 .env 文件里添加
app_timezone=prc
lumen php 的时区设置问题解决。
lumen 时区设置总结
编辑 .env 文件添加配置
app_timezone=prc db_timezone=+08:00
若没启用 .env 配置文件, 编辑
/vendor/laravel/lumen-framework/config/database.php /vendor/laravel/lumen-framework/src/application.php
分别修改 app_timezone 和 db_timezone 参数值。
启用 .env 配置文件
将 lumen 根目录下的 .env.example 文件重命名为 .env, 编辑 /bootstrap/app.php, 取消如下行代码的注释
dotenv::load(__dir__.'/../');
补充:
因为lumen默认使用格林尼治时间,需要转成北京时间。
在.env中加入
app_timezone=prc
db_timezone=+08:00
这样时间就正确了