Lumen 设置 timezone 时区

转载 2016年06月01日 17:57:34


今天用 Lumen 框架写代码时, 也是初次体验 Lumen, 遇到了一个问题, 从数据库里查出的时间比数据库里保存的 TIMESTAMP 时间慢了8个小时, 很明显这是一个时区设置的问题, 本以为可以在1分钟内解决的, 但是我错了。

根据 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 框架写代码时, 也是初次体验 Lumen, 遇到了一个问题, 从数据库里查出的时间比数据库里保存的 TIMESTAMP 时间慢了8个小时, 很明显这是一个时区设置的问题, 本以为可以在1分钟内解决的, 但是我错了。

根据 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__.'/../');

IOS 世界标准时间UTC /GMT 转为当前系统时区对应的时间

- (NSDate *)getNowDateFromatAnDate:(NSDate *)anyDate { //设置源日期时区 NSTimeZone* sourceTimeZone ...
  • fengsh998
  • fengsh998
  • 2013年08月03日 15:48
  • 73858

Django设置TIME_ZONE为中国,及其规则与善后问题

Django默认的timezone是TIME_ZONE = ‘America/Chicago’ 现在要改成我们中国的时区 只需编辑settings.py文件 把time_zone的值改成T...
  • WY00703
  • WY00703
  • 2015年04月16日 10:06
  • 10527

java的TimeZone

java的TimeZone 以下引用别人的说明: 对于时间分为 本地挂钟时间 和 UTC时间,所谓的UTC时间就是指表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 ...
  • lianqiangjava
  • lianqiangjava
  • 2012年11月08日 17:14
  • 3178

lumen时间不准确,少8个小时

因为lumen默认使用格林尼治时间,需要转成北京时间。 在.env中加入 APP_TIMEZONE=PRC DB_TIMEZONE=+08:00 这样时间就正确了...
  • ziwoods
  • ziwoods
  • 2017年03月24日 15:51
  • 511

Nodejs TimeZone 相关设置(修改时区)

最近遇到了时区设置的问题 在Nodejs中,取当前时间(GMT格式)可以使用Datevar GMTDate = new Date();//Sun Mar 06 2016 20:42:44 GMT-0...
  • u010668495
  • u010668495
  • 2016年03月07日 09:49
  • 8091

impala常用

1、E1010 14:22:41.093611 3181 impalad-main.cc:90] Impalad services did not start correctly, exiting....
  • dazheng
  • dazheng
  • 2015年06月13日 12:10
  • 1040

Impala问题汇总

1、时区问题: 默认impala配置不是中国的时区,所以在用from_unixtime的时候,有误差。 解决方案:impala启动时加  -use_local_tz_for_unix_timest...
  • huguoping830623
  • huguoping830623
  • 2016年07月14日 16:51
  • 885

Android设置App全局时区

在MyApplication extends Application的onCreate中设置TimeZone值即可全局适用: /** * 设置app内全局时区 */ public void ...
  • sthtianhang
  • sthtianhang
  • 2017年05月05日 14:33
  • 521

Nodejs TimeZone 相关设置(修改时区)

最近遇到了时区设置的问题 在Nodejs中,取当前时间(GMT格式)可以使用Datevar GMTDate = new Date();//Sun Mar 06 2016 20:42:44 GMT-0...
  • u010668495
  • u010668495
  • 2016年03月07日 09:49
  • 8091

嵌入式Linux系统如何设置TimeZone

作者:EasyWave 时间:2014.06.08 类别:Linux内核-TimeZone设置 ...
  • wavemcu
  • wavemcu
  • 2014年06月08日 17:16
  • 3512
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Lumen 设置 timezone 时区
举报原因:
原因补充:

(最多只允许输入30个字)