Поле dateTimeTz
Метод dateTimeTz используется в миграциях Laravel
для создания столбца с типом данных, который хранит
дату и время вместе с временной зоной. Первым параметром
передаётся имя колонки, вторым необязательным параметром
можно указать точность (количество цифр для долей секунды).
По умолчанию точность равна 0.
Синтаксис
<?php
Schema::table('table_name', function (Blueprint $table) {
$table->dateTimeTz($column, $precision = 0);
});
?>
Пример
Давайте создадим миграцию для таблицы 'events'
с полем для хранения времени проведения события
с учётом часового пояса:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('events', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->dateTimeTz('start_time');
$table->dateTimeTz('end_time', 3);
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('events');
}
};
?>
В этом примере поле 'start_time' будет хранить
дату и время с часовым поясом без долей секунды,
а поле 'end_time' - с точностью до 3 знаков
после запятой (миллисекунды).
Пример
Добавим поле с часовым поясом в существующую таблицу
'posts' для хранения времени публикации:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::table('posts', function (Blueprint $table) {
$table->dateTimeTz('published_at')->nullable();
});
}
public function down()
{
Schema::table('posts', function (Blueprint $table) {
$table->dropColumn('published_at');
});
}
};
?>
Метод nullable позволяет полю принимать
значение null, что удобно, если публикация
ещё не состоялась.
Пример
Рассмотрим пример использования поля dateTimeTz
в модели для форматирования даты с учётом часового пояса:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Event extends Model
{
protected $casts = [
'start_time' => 'datetime:Y-m-d H:i:s e',
'end_time' => 'datetime:Y-m-d H:i:s.v e',
];
public function getFormattedStartTime()
{
return $this->start_time->format('Y-m-d H:i:s e');
}
}
?>
В результате при получении данных из базы поле
'start_time' будет автоматически преобразовано
в объект Carbon с учётом временной зоны.
<?php
use App\Models\Event;
$event = Event::find(1);
$res = $event->getFormattedStartTime();
echo $res;
?>
Результат выполнения кода:
"2026-09-08 15:30:00 UTC"
Смотрите также
-
метод
dateTime,
который создаёт поле для хранения даты и времени без часового пояса -
метод
timestampTz,
который создаёт поле для хранения временной метки с часовым поясом -
метод
date,
который создаёт поле для хранения только даты -
метод
time,
который создаёт поле для хранения только времени