2017-02-08 27 views
0

Если я создаю приложение Laravel (Lumen), посвященное часовому поясу, где пользователь может не контролировать свои настройки часового пояса базы данных, но может предоставить мое приложение с настраиваемым часовым поясом в конфигурации.Пользовательская поддержка часового пояса в Laravel/Lumen

Я также должен иметь возможность хранить временные метки в базе данных через прямое соединение в стороннем приложении (снова помните, что часовой пояс может быть неправильным в конфигурации базы данных), поэтому я думаю, что временная метка unix будет подходящей Я могу использовать UNIX_TIMESTAMP(NOW()) в прямом подключении третьей стороны.

  1. Должен ли я хранить метки времени в формате unix integer?

  2. Что такое лучший способ поддержать это глобально в Laravel поскольку $table->timestamps(); использует TIMESTAMP

  3. Как обеспечить дату/время автоматически преобразуются в часовой пояс, указанный в конфигурации Laravel, когда запрос к базе данных для вывода json для API?

Примечание: Я не ищу, чтобы перевести на несколько часовых поясов, только один в .env

Текущий .env

APP_TIMEZONE=UTC

Текущая миграция Пример

use Illuminate\Support\Facades\Schema; 
use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 

class CreateSharesTable extends Migration 
{ 
    public function up() 
    { 
     Schema::create('shares', function (Blueprint $table) { 
      $table->increments('id'); 

      $table->string('url', 500); 
      $table->string('description', 100); 
      $table->integer('hits'); 
      $table->string('ip_address', 39); 

      $table->timestamps(); 
     }); 
    } 

Current Share модель

namespace App; 

use Illuminate\Database\Eloquent\Model; 


class Share extends Model 
{ 

    protected $fillable = ['url', 'description', 'ip_address']; 

    protected $hidden = ['ip_address']; 
} 

регулятора тока Пример

namespace App\Http\Controllers; 

use App\Share; 
use App\Http\Controllers\Controller; 
use Illuminate\Support\Facades\DB; 
use Illuminate\Http\Request; 

class ShareController extends Controller 
{ 

    /** 
    * @SWG\Get(
    *  tags={"Shares"}, 
    *  path="/shares", 
    *  summary="Finds all shares", 
    *  description="Returns all shares ", 
    *  @SWG\Response(
    *   response=200, 
    *   description="A list of all shares" 
    * ) 
    *) 
    */ 
    public function fetchAll() 
    { 

     return Share::get(); 
    } 

ответ

1

Вы можете использовать config\app.php вместо .env

config(['app.timezone' => $timezone]); 

где $timezone является один из них: http://php.net/manual/en/timezones.php

Должен ли я хранить метки времени в формате unix integer?

Вы могли бы, но ISO8601 является litterally стандартом ISO, так почему бы не то, что

Что такое лучший способ поддержать это глобально в Laravel так $ table-> метки времени(); использует TIMESTAMP

Carbon - отличный способ работать со временными отметками, добавляя и вытягивая время. Используйте мой код, чтобы изменить часовые пояса и использовать их в Carbon.

Как обеспечить дату/время автоматически преобразуются в часовой пояс , указанный в конфигурации Laravel, когда запрос к базе данных для вывода JSON с API?

Это то, что Laravel будет обрабатывать для вас, если вы установите часовой пояс в сеансе, который может храниться между запросами, или если вы передадите его alang в качестве аргумента для каждого запроса.

+0

Если бы я использовал NOW() из моего прямого прямого соединения db, но вставлял TIMESTAMP на основе настроек часового пояса базы данных. Поэтому я не должен хранить все в временных отметках unix, чтобы гарантировать, что как прямое соединение третьей стороны, так и Laravel вставляют их в один и тот же «часовой пояс» (UTC). – Titan

+0

Я буду хранить все, как UTC https://en.wikipedia.org/wiki/ISO_8601#Time_offsets_from_UTC И они на лету отображают временные метки в соответствии с часовым поясом посетителей, используя углерод, у вас есть эта информация в php или используйте moment.js как последнее средство, когда вы получаете информацию из браузера (http://stackoverflow.com/questions/1091372/getting-the-clients-timezone-in-javascript) –

+0

Только что я понял, что могу использовать 'UTC_TIMESTAMP()' из моего прямое подключение третьей стороны – Titan

 Смежные вопросы

  • Нет связанных вопросов^_^