在 Lumen 或 Laravel 5 中更改时区

100

我正在使用Lumen框架。如何将时区更改为欧洲/巴黎CEST?

我在我的.env文件中添加了一个变量:

APP_TIMEZONE=Europe/Paris

但是这样行不通。更新时区的正确方法是什么?


1
在 Lumen 5.2 中,这应该已经足够了。但是,您可能需要在 Laravel 的 config/app.php 文件中设置 env('APP_TIMEZONE') 变量。 - Matt Humphrey
2
它也适用于Lumen 5.1。经过多天的努力,我终于意识到仅仅更改服务器和数据库的时区是不够的 - 在.env文件中设置时区之前,Lumen不会关心。 - Bizarro
你是怎么知道它没起作用的?是数据库记录有问题还是 php 生成的时间不正确?你有一个简单的示例来展示你是如何看到错误时间的吗? - Sherbrow
为什么对我不起作用?数据库中显示的时间晚了8个小时... - Daisy
请确保执行 composer update 命令并清除 config:cache 缓存。 - mercury
17个回答

223

您可以通过配置config文件夹中的app.php文件来设置您的应用程序时区

要更改时区,请修改app.php文件中的timezone值。

此内容写在这个部分中。

|--------------------------------------------------------------------------
| Application Timezone
|--------------------------------------------------------------------------
|
| Here you may specify the default timezone for your application, which
| will be used by the PHP date and date-time functions. We have gone
| ahead and set this to a sensible default for you out of the box.
|
 

我在我的应用程序中使用 Asia/Dhaka 作为时区。

这里是适当的语法:

'timezone' => 'Asia/Dhaka'

PHP的时区列表。


1
时区为“America/Los_Angeles”,代表太平洋标准时间。谢谢。 - Connor Leech
12
如果你这样做,但是没有起作用,那么在更改app.php文件后运行“php artisan config:cache”命令。你需要重新加载新设置下的配置。 - agm1984
6
请不要忘记在每行末尾添加逗号。;) 我的意思是 'timezone' => 'Asia/Dhaka', - Md. Robi Ullah

56

有两种更新您的代码的方法。 1. 请打开位于项目根目录下的config目录中的app.php文件。 向下滚动页面并检查应用程序时区, 您会找到

'timezone' => 'UTC',

在这里您可以添加您的时区,例如

'timezone' => 'Europe/Paris',
如果您想从.env文件中管理您的时区,则可以在config.php文件中添加以下代码。
'timezone' => env('APP_TIMEZONE', 'UTC'),

并在您的.env文件中添加以下行。

APP_TIMEZONE='Europe/Paris'
请查看以下链接以获取更多信息:https://laravel.com/docs/5.6/configuration#accessing-configuration-values

25

修改app.php后,请确保运行:

 php artisan config:clear

这是清除配置设置缓存所必需的。如果在更改app.php文件中的时区后发现时间戳仍然不正确,则运行上述命令应该可以刷新所有内容,您的新时区应该生效。


12
请尝试以下操作 - 在您的 Lumen 设置中创建一个名为“config”的目录,然后在该“config”目录中创建 app.php 文件。它将看起来像这样 -
<?php return ['app.timezone' => 'America/Los_Angeles'];

那么您可以像这样在任何地方访问它的值 -

$value = config('app.timezone');
如果它不能正常工作,您可以在routes.php中添加这些行。
date_default_timezone_set('America/Los_Angeles');

这对我有用!


这是不正确的 - 在app.php配置文件中放置app.timezone是多余的,因为config('app.timezone')中的app部分是指config/目录中的文件名。 - Matt Humphrey
好的 @MattHumphrey ,如果你觉得我的答案有错,可以进行编辑。 - Sachin Vairagi
在路由文件中添加 date_default_timezone_set 对我来说完全有效。 - Hasan
date_default_timezone_set 应该添加到 AppServiceProvider.phpboot 方法中,而不是 _routes.php_,因为这样更合理,尽管两种方式都可以工作。 - Ahmad Baktash Hayeri
是的,而且如果你正在使用Laravel并且有多个路由文件,你必须在所有文件中都放置这个调用! - tom f
显示剩余2条评论

10
前往配置-> app.php,将 'timezone' => 'Asia/Jakarta' 更改为你想设定的时区。(这是我的时区)

7
在Lumen的.env文件中,要指定时区。对于印度来说,应该像这样:
APP_TIMEZONE = 'Asia/Calcutta'
DB_TIMEZONE = '+05:30'

7

在 Laravel 或 Lumen 中设置默认时区有一个简单的方法。

在使用多个环境并且每个环境基于不同的时区时,这非常有用。

  1. 打开项目目录中的 .env 文件。
  2. .env 文件中添加 APP_TIMEZONE=Asia/Kolkata (您可以从支持的时区列表中选择任何时区)。
  3. 打开项目目录下的 bootstrap 文件夹中的 app.php 文件。
  4. app.php 文件中添加 date_default_timezone_set(env('APP_TIMEZONE', 'UTC'));

通过此更改,您的项目将采用您在 .env 中设置的时区,如果没有设置,则默认采用 UTC

修改时区设置后,请运行命令 php artisan config:clear 以便应用程序反映出您的更改。


6

使用来自PHP手册的PHP时区 PHP时区

例如,我可以通过以下方式,在config/app.php中更改我的时区设置:

'timezone' => 'Africa/Nairobi',

5
你只需要编辑config目录下的app.php文件,找到以下几行代码。
/*
|--------------------------------------------------------------------------
| Application Timezone
|--------------------------------------------------------------------------
|
| Here you may specify the default timezone for your application, which
| will be used by the PHP date and date-time functions. We have gone
| ahead and set this to a sensible default for you out of the box.
|
*/

'timezone' => 'UTC',

并且.. 将它更改为:

'timezone' => 'Europe/Paris',

5

在我的情况下(读取Lumen 5.1项目中MySQL数据库的日期),唯一有效的解决方法是使用Carbon设置变量的时区:

    $carbonDate = new Carbon($dateFromDBInUTC);
    $carbonDate->timezone = 'America/New_York';
    return $carbonDate->toDayDateTimeString(); // or $carbonDate->toDateTimeString() for ISO format

.env 文件中使用 DB_TIMEZONE=-05:00 几乎可以解决问题,但无法处理夏令时更改的情况。
.env 文件中使用 APP_TIMEZONE=America/New_York 对从 MySQL 数据库检索到的时区值在 Lumen 5.1 webapp 中没有影响,但在 Lavarel 5.1 中有效。
此外,Lumen 没有读取我创建的 [lumen_project]/config/app.php 文件(即使我在那里放置语法错误,它也没有发出警告)。
使用 date_default_timezone_set 也没有效果。

1
谢谢您。我尝试了许多其他解决方案(包括您在摘要中列出的解决方案),但都没有起作用。目前,在控制器中将时区设置为Carbon变量似乎已经起作用了。 - Sheldon Scott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接