2017-04-07 97 views
0

我有一個問題:您如何在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中配置:

https://pastebin.com/Uq005TjT

維拉克魯扎: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" 
    } 
    ] 
] 

回答

0

也許你必須設置爲PHP支持的時區。

如果我沒有誤解,在你的情況下,你試圖設置時區到巴西。

這應該工作:

'timezone' => 'America/Brasilia' 
+0

在說真的,我很願意和應用postgres連接利用UTC時區,而不是我本地時間的巴西利亞。 –

0

我的用戶模型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" 
    ] 
]