数据存储的 timestamp 时间正确 但是 Laravel 取出来的时间慢的 8 小时(Lumen timezone 时区设置方法(慢了8个小时))


这个问题以为1分钟就可以搞定,但是我错了,怎么修改也不行,在网上看到很多时区的修改问题大多数都是改数据库的时区和加8:00等操作,对我来说根本无济于事没有用。最后终于看到的对我起作用的文档。收藏一下。

我用到的:(基本前面的操作我之前在数据库的my.cnf中都看过了,我就没去操作,直接走的在env里面操作增加时区8:00这个就可以了)

引用别人的文章。:

 

根据 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 的默认配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
'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 部分的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* 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 文件添加配置

1
2
APP_TIMEZONE=PRC
DB_TIMEZONE=+08:00

若没启用 .env 配置文件, 编辑

1
2
/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

这样时间就正确了


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM