Imposta database predefinita DateFormat su ISO 8601 con Timezones a Laravel
Domanda
Penso che il titolo lo dice: voglio usare ISO 8601 con Timezones come formato di dati predefinito in Laravels eloquente.Ho preso questo
class mEloquent extends Eloquent {
protected function getDateFormat()
{
return 'YYYY-MM-DDThh:mm:ss.sTZD';
}
}
.
Tutti i miei modelli si estenderanno meloquente.Ma come dovrei costruire i tavoli?Solo
<?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();
});
} ......
.
normale? Come posso confrontare questa data?O Shoud Uso solo quello predefinito e salva il fuso orario separatamente?
Soluzione
È davvero facile se segui i documenti.
PHP date
Function supporta ISO 8601 Dal momento che PHP5 e possiamo ottenerlo passando il carattere del formato 'c'
.
http://php.net/manual/en/function.date.php
Così in un modello di lauravel, possiamo fare qualcosa del genere:
public function getPublishedAt8601Attribute()
{
return $this->published_at->format('c');
}
.
E quindi possiamo accedere all'attributo come questo:
// Prints something like: 2016-10-13T21:48:00+03:00
echo $post->published_at_8601;
. Altri suggerimenti
Come menzionato nei documenti, aggiungilo al tuo "Meloquentent" della tua classe base
/**
* The storage format of the model's date columns.
*
* @var string
*/
protected $dateFormat = 'c';
.
È inoltre possibile controllare la data serializzations: https://laravel.com/docs/5.6/eloquent-serializzazione#Date-Serializzazione
$date = Carbon::now();
echo $date->toW3cString();
$date = $this->repository->find($id);
echo $date->created_at->toW3cString();
.
output
.2018-04-14T18: 35: 58 + 00: 00