Laravel 5配置时区未在postgres连接中定义时区
问题描述:
我有一个问题:您如何在laravel 5的站点上使用时区?Laravel 5配置时区未在postgres连接中定义时区
Postgres在当地时间和我的笔记本当地时区在巴西利亚。但该应用程序的设置为UTC的config/app.php
,但config/database.php
中的数据库配置没有规范,所以我通过参数来查找config("app.timezone")
,它是UTC
。
然后登录后,我会打印JWT CustomClaims
和巴西利亚的时区来找我。 [0.o]
在postgres clilent上运行时,我将UTC的时区对冲并对用户数据进行搜索,结果正常。所以config/database.php
中的这个参数没有解决。
任何提示?
粘贴与database.php中配置:
维拉克鲁扎:Debian的杰西
~$ timedatectl
[email protected]:~$ timedatectl
Local time: Thu 2017-04-06 21:16:55 -03
Universal time: Fri 2017-04-07 00:16:55 UTC
RTC time: Thu 2017-04-06 21:16:56
Time zone: America/Sao_Paulo (-03, -0300)
NTP enabled: yes
NTP synchronized: no
RTC in local TZ: yes
DST active: no
Last DST change: DST ended at
Sat 2017-02-18 23:59:59 -02
Sat 2017-02-18 23:00:00 -03
Next DST change: DST begins (the clock jumps one hour forward) at
Sat 2017-10-14 23:59:59 -03
Sun 2017-10-15 01:00:00 -02
Warning: The system is configured to read the RTC time in the local time zone. This
mode can not be fully supported. It will create various problems with time
zone changes and daylight saving time adjustments. The RTC time is never updated,
it relies on external facilities to maintain it. If at all possible, use
RTC in UTC by calling 'timedatectl set-local-rtc 0'
配置/ 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',
/*
|--------------------------------------------------------------------------
| Application Locale Configuration
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
| by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application.
|
*/
'locale' => 'en',
配置/ database.php中
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Database Connection Name
|--------------------------------------------------------------------------
|
| Here you may specify which of the database connections below you wish
| to use as your default connection for all database work. Of course
| you may use many connections at once using the Database library.
|
*/
'default' => env('DB_CONNECTION', 'mysql'),
/*
|--------------------------------------------------------------------------
| Database Connections
|--------------------------------------------------------------------------
|
| Here are each of the database connections setup for your application.
| Of course, examples of configuring each database platform that is
| supported by Laravel is shown below to make development simple.
|
|
| All database work in Laravel is done through the PHP PDO facilities
| so make sure you have the driver for your particular database of
| choice installed on your machine before you begin development.
|
*/
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
],
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
'pgsql' => [
'driver' => 'pgsql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '5432'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'timezone' => config('app.timezone'),
'locale' => config('app.locale'),
'prefix' => '',
'schema' => 'public',
'sslmode' => 'prefer',
],
],
我的时区现在证实:
array:1 [
"user" => array:4 [
"id" => 2
"name" => "Francis Rodrigues"
"email" => "[email protected]"
"last_logged_in_at" => Carbon {#236
+"date": "2017-04-07 11:49:48.000000"
+"timezone_type": 1
+"timezone": "-03:00"
}
]
]
答
也许你必须设置为PHP支持的时区。
如果我没有误解,在你的情况下,你试图设置时区到巴西。
这应该工作:
'timezone' => 'America/Brasilia'
答
我的用户模型provisory解决方案:在UTC时区
/**
* Setting UTC timezone with mutator.
*
* @param $value
* @return string
*/
public function getLastLoggedInAtAttribute($value)
{
$carbon = Carbon::createFromTimestampUTC(strtotime($value));
return $carbon->toDateTimeString() . $carbon->getTimezone()->getName();
}
输出:
array:1 [
"user" => array:4 [
"id" => 2
"name" => "Francis Rodrigues"
"email" => "[email protected]"
"last_logged_in_at" => "2017-04-07 18:04:31+00:00"
]
]
在说真的,我很愿意和应用postgres连接利用UTC时区,而不是我本地时间的巴西利亚。 –