Lumen timezone 时区设置方法(慢了8个小时)

 更新时间:2018年01月20日 22:34:25   投稿:mdxy-dxy  
今天用 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默认使用格林尼治时间,需要转成北京时间。
在.env中加入

APP_TIMEZONE=PRC
DB_TIMEZONE=+08:00

这样时间就正确了

相关文章

  • 国外十大最流行的PHP框架排名

    国外十大最流行的PHP框架排名

    本文来自国外的一个PHP技术人员网站,总结了国外的十个目前最流行的PHP MVC框架。具体排名顺序未必准确,还有些知名框架,如Kohana等也没有提及。不过仍可以做为一篇不错的参考
    2013-07-07
  • php利用ffmpeg提取视频中音频与视频画面的方法详解

    php利用ffmpeg提取视频中音频与视频画面的方法详解

    想要提取视频中的音频信息,首选的技术是ffmpeg,ffmpeg是一个非常有用的命令行程序,它可以用来转码媒体文件。这篇文章主要给大家介绍了PHP利用ffmpeg提取视频中音频与视频画面的相关资料,需要的朋友可以参考下。
    2017-06-06
  • php获取mysql数据库中的所有表名的代码

    php获取mysql数据库中的所有表名的代码

    如何用PHP获取MYSQL数据库的所有表名?记得在mysql命令行下面有条命令SHOW TABLES是显示mysql数据库里面所有数据表的,那么就用这条命令来遍历数据表名吧
    2011-04-04
  • php技巧小结【推荐】

    php技巧小结【推荐】

    本文主要分享了分享php工作中遇到的一些探究和技巧,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • php设计模式  Command(命令模式)

    php设计模式 Command(命令模式)

    将一个请求封装为一个对象从而使你可用不同的请求对客户进行参数化,对请求排除或记录请求日志,以及支持可取消的操作
    2011-06-06
  • PHP 简单数组排序实现代码

    PHP 简单数组排序实现代码

    PHP知道如何比较两个数字或字符串,但多维数组的每个元素都是数组。PHP不知道如何去比较两个数组,所以需要建立一个比较它们的方法。
    2009-08-08
  • libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢

    libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢

    很多安装PHP的教程,都是教大家把php里的libmysql.dll拷贝到c:\windows目录下(有的教程会说还要把php.ini等文件拷到系统目录的,其实一个文件都不用拷贝去的。)。
    2010-03-03
  • PHP设计模式之策略模式原理与用法实例分析

    PHP设计模式之策略模式原理与用法实例分析

    这篇文章主要介绍了PHP设计模式之策略模式原理与用法,结合实例形式较为详细的分析了策略模式的概念、原理及php实现与使用策略模式的相关操作技巧,需要的朋友可以参考下
    2019-04-04
  • PHP实现简单ajax Loading加载功能示例

    PHP实现简单ajax Loading加载功能示例

    这篇文章主要介绍了PHP实现简单ajax Loading加载功能的方法,结合实例形式分析了ajax加载的原理、操作技巧与相关注意事项,需要的朋友可以参考下
    2016-12-12
  • PHP高并发和大流量解决方案整理

    PHP高并发和大流量解决方案整理

    在本篇文章里小编给大家分享的是一篇关于PHP高并发和大流量解决方案内容,有兴趣的朋友们可以参考下。
    2019-12-12

最新评论