Установите DateFormat базы данных по умолчанию в ISO 8601 с часовыми поясами в Laravel

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

Вопрос

Я думаю, название говорит само за себя:Я хочу использовать ISO 8601 с часовыми поясами в качестве формата DateTime по умолчанию в Laravels Eloquent.Я понял это

class mEloquent extends Eloquent {

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

}

Все мои модели будут расширяться мелоквентно.Но как мне следует создавать таблицы?Просто

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

как обычно?Как я могу сравнить этот формат даты?Или мне просто использовать значение по умолчанию и сохранить часовой пояс отдельно?

Это было полезно?

Решение

Это действительно просто, если вы будете следовать документам.

PHP date поддержка функций ISO 8601 начиная с PHP5, и мы можем получить его, передав 'c' форматирование символа.

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

Модель Laravel преобразует атрибуты даты в Carbon Объекты.Углерод расширяется DateTime который обладает format функция, поддерживающая все date форматирование символов.

Вы можете легко создать средство доступа (или даже новый пользовательский атрибут) для изменения атрибута даты.Затем используйте Углерод format способ изменить его на ISO 8601 формат.

Итак, в модели laravel мы можем сделать что-то вроде этого:

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

и тогда мы можем получить доступ к атрибуту следующим образом:

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

Другие советы

Как уже упоминалось в документах, добавьте это на ваш базовый класс «Meoquent»

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

Вы также можете проверить сериализацию даты: https://laravel.com/docs/5.6/eloquent-serialization#date-Сериализация

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

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

Выход

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top