Lumen timezone 时区设置方法(慢了8个小时)
根据Laravel4.x和5.0的经验,只需要到config/app.php中设置下‘timezone'参数为‘PRC'就好了,找到Lumen的config目录,在/vendor/laravel/lumen-framework/config路径下,但是config/app.php的参数选项中没有timezone参数选项,手动加上后也是无效的。
然后想到Laravel5的.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文件中找到了初始化lumentimezone部分的代码
/** *CreateanewLumenapplicationinstance. * *@paramstring|null$basePath *@returnvoid */ publicfunction__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
lumenphp的时区设置问题解决。
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
这样时间就正确了