Definir padrão de banco de dados DateFormat ISO 8601 com fusos horários no Laravel
Pergunta
Eu acho que o título diz:Eu quero usar o ISO 8601 com fusos horários como padrão DateTime-Formato em Laravels Eloqüente.Eu tenho esse
class mEloquent extends Eloquent {
protected function getDateFormat()
{
return 'YYYY-MM-DDThh:mm:ss.sTZD';
}
}
Todos os meus modelos irá estender mEloquent.Mas como devo construir as tabelas?Apenas
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
class CreateUsersTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function(Blueprint $table)
{
$table->increments('id');
$table->string('firstName');
$table->string('lastName');
$table->string('email')->unique();
$table->string('password');
$table->timestamps();
});
} ......
como é normal?Como posso comparar esta dateformat?Ou eu só devem usar o padrão e salvar o fuso horário separadamente?
Solução
É muito fácil se você seguir os documentos.
PHP date
função de suporte ISO 8601 desde PHP5 e podemos obtê-lo, passando a 'c'
caracteres de formato.
http://php.net/manual/en/function.date.php
Laravel modelo converte atributos de data para Carbon
os objetos.De carbono se estende DateTime
o que tem a format
função que suporta todos os date
caracteres de formato.
Você pode facilmente criar um descritor de acesso (ou até mesmo um novo atributo personalizado) para alterar um atributo de data.Em seguida, use o Carbono format
método para alterá-lo para ISO 8601 formato.
Assim, em um laravel modelo, podemos fazer algo assim:
public function getPublishedAt8601Attribute()
{
return $this->published_at->format('c');
}
e, então, pode acessar o atributo como este:
// Prints something like: 2016-10-13T21:48:00+03:00
echo $post->published_at_8601;
Outras dicas
Como mencionado no docs, adicionar isso para sua classe base 'mEloquent'
/**
* The storage format of the model's date columns.
*
* @var string
*/
protected $dateFormat = 'c';
Você pode também a data de check-out serializations:https://laravel.com/docs/5.6/eloquent-serialization#date-serialization
$date = Carbon::now();
echo $date->toW3cString();
$date = $this->repository->find($id);
echo $date->created_at->toW3cString();
Saída
2018-04-14T18:35:58+00:00