Définir la base de données par défaut DateFormat sur ISO 8601 avec des fuseaux horaires dans Laravel

StackOverflow https://stackoverflow.com//questions/25023790

Question

Je pense que le titre le dit :Je souhaite utiliser ISO 8601 avec des fuseaux horaires comme format DateTime par défaut dans Laravels Eloquent.j'ai eu ça

class mEloquent extends Eloquent {

   protected function getDateFormat()
   {
       return 'YYYY-MM-DDThh:mm:ss.sTZD';
   }

}

Tous mes modèles prolongeront mEloquent.Mais comment dois-je construire les tables ?Juste

<?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();
    });
} ......

comme d'habitude?Comment puis-je comparer ce format de date ?Ou devrais-je simplement utiliser celui par défaut et enregistrer le fuseau horaire séparément ?

Était-ce utile?

La solution

C'est vraiment simple si vous suivez les documents.

PHP date fonction prend en charge OIN 8601 depuis PHP5 et on peut l'obtenir en passant le 'c' caractère de formatage.

http://php.net/manual/en/function.date.php

Le modèle Laravel convertit les attributs de date en Carbon objets.Le carbone s'étend DateTime qui a le format fonction qui prend en charge tous les date formater les caractères.

Vous pouvez facilement créer un accesseur (ou même un nouvel attribut personnalisé) pour modifier un attribut de date.Utilisez ensuite le Carbone format méthode pour le changer en OIN 8601 format.

Ainsi, dans un modèle Laravel, nous pouvons faire quelque chose comme ceci :

public function getPublishedAt8601Attribute()
{
    return $this->published_at->format('c');
}

et ensuite nous pouvons accéder à l'attribut comme ceci :

// Prints something like: 2016-10-13T21:48:00+03:00
echo $post->published_at_8601;

Autres conseils

Comme mentionné dans les documents, ajoutez ceci à votre classe de base 'meloquent'

/**
 * The storage format of the model's date columns.
 *
 * @var string
 */
protected $dateFormat = 'c';

Vous pouvez également consulter la date de la série Serializations: https://laravel.com/docs/5.6/eloquent-Serialization#Date-sérialisation

$date = Carbon::now();
echo $date->toW3cString();

$date = $this->repository->find($id);
echo $date->created_at->toW3cString();

sortie

2018-04-14t18: 35: 58 + 00: 00

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top