• lumen时区


    今天用 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 的默认配置如下:

    1.  
      'mysql' => [
    2.  
      'driver' => 'mysql',
    3.  
      'host' => env('DB_HOST', 'localhost'),
    4.  
      'port' => env('DB_PORT', 3306),
    5.  
      'database' => env('DB_DATABASE', 'forge'),
    6.  
      'username' => env('DB_USERNAME', 'forge'),
    7.  
      'password' => env('DB_PASSWORD', ''),
    8.  
      'charset' => 'utf8',
    9.  
      'collation' => 'utf8_unicode_ci',
    10.  
      'prefix' => env('DB_PREFIX', ''),
    11.  
      'timezone' => env('DB_TIMEZONE','+00:00'),
    12.  
      'strict' => false,
    13.  
      ],

    在这里有个数据库的 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.  
      * Create a new Lumen application instance.
    3.  
      *
    4.  
      * @param string|null $basePath
    5.  
      * @return void
    6.  
      */
    7.  
      public function __construct($basePath = null)
    8.  
      {
    9.  
      date_default_timezone_set(env('APP_TIMEZONE', 'UTC'));
    10.  
       
    11.  
      $this->basePath = $basePath;
    12.  
      $this->bootstrapContainer();
    13.  
      $this->registerErrorHandling();
    14.  
      }

    代码中使用的 .env 参数为 APP_TIMEZONE, 值为 UTC, 在这里将 UTC 改为 PRC, 或者在 .env 文件里添加

    APP_TIMEZONE=PRC

    lumen php 的时区设置问题解决。


    Lumen 时区设置总结

    编辑 .env 文件添加配置

    1.  
      APP_TIMEZONE=PRC
    2.  
      DB_TIMEZONE=+08:00

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

    1.  
      /vendor/laravel/lumen-framework/config/database.php
    2.  
      /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 的默认配置如下:

    1.  
      'mysql' => [
    2.  
      'driver' => 'mysql',
    3.  
      'host' => env('DB_HOST', 'localhost'),
    4.  
      'port' => env('DB_PORT', 3306),
    5.  
      'database' => env('DB_DATABASE', 'forge'),
    6.  
      'username' => env('DB_USERNAME', 'forge'),
    7.  
      'password' => env('DB_PASSWORD', ''),
    8.  
      'charset' => 'utf8',
    9.  
      'collation' => 'utf8_unicode_ci',
    10.  
      'prefix' => env('DB_PREFIX', ''),
    11.  
      'timezone' => env('DB_TIMEZONE','+00:00'),
    12.  
      'strict' => false,
    13.  
      ],

    在这里有个数据库的 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.  
      * Create a new Lumen application instance.
    3.  
      *
    4.  
      * @param string|null $basePath
    5.  
      * @return void
    6.  
      */
    7.  
      public function __construct($basePath = null)
    8.  
      {
    9.  
      date_default_timezone_set(env('APP_TIMEZONE', 'UTC'));
    10.  
       
    11.  
      $this->basePath = $basePath;
    12.  
      $this->bootstrapContainer();
    13.  
      $this->registerErrorHandling();
    14.  
      }

    代码中使用的 .env 参数为 APP_TIMEZONE, 值为 UTC, 在这里将 UTC 改为 PRC, 或者在 .env 文件里添加

    APP_TIMEZONE=PRC

    lumen php 的时区设置问题解决。


    Lumen 时区设置总结

    编辑 .env 文件添加配置

    1.  
      APP_TIMEZONE=PRC
    2.  
      DB_TIMEZONE=+08:00

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

    1.  
      /vendor/laravel/lumen-framework/config/database.php
    2.  
      /vendor/laravel/lumen-framework/src/Application.php

    分别修改 APP_TIMEZONE 和 DB_TIMEZONE 参数值。

    启用 .env 配置文件

    将 Lumen 根目录下的 .env.example 文件重命名为 .env, 编辑 /bootstrap/app.php, 取消如下行代码的注释

    Dotenv::load(__DIR__.'/../');
  • 相关阅读:
    【Nodejs】Http模块01
    第三周周报_微信开发(上)
    Java 程序设计入门_第一周(下)
    Java 程序设计入门_第一周(上)
    NLP with Python-Chapter1 language Processiong and Python--1.1 compute with Language :texts and words
    使用Python访问网络数据 python network-data 第六章(2)
    #1 依次调用脚本
    关于安装第三方模块和PILLOW
    介绍下我治几~
    fibnacci数列
  • 原文地址:https://www.cnblogs.com/brady-wang/p/10875700.html
Copyright © 2020-2023  润新知