РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
150 of 258 menu

Поле datetimetz

Поле datetimetz относится к типу Doctrine datetimetz и хранит дату, время и часовой пояс. В PHP такое значение представляется объектом DateTime. В отличие от поля datetime, которое сохраняет момент времени без привязки к зоне, datetimetz запоминает ещё и саму зону, в которой это время было указано.

При извлечении из базы данных Doctrine восстанавливает объект DateTime вместе с его часовым поясом. Поэтому поле удобно использовать, когда важно знать, в какой зоне было зафиксировано событие.

Синтаксис

#[ORM\Column(type: 'datetimetz')] private DateTime $createdAt;

Пример

Давайте создадим сущность с полем datetimetz:

<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use DateTime; #[ORM\Entity] class Article { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column(type: 'integer')] private int $id; #[ORM\Column(type: 'string')] private string $title; #[ORM\Column(type: 'datetimetz')] private DateTime $createdAt; public function getCreatedAt(): DateTime { return $this->createdAt; } public function setCreatedAt(DateTime $createdAt): self { $this->createdAt = $createdAt; return $this; } } ?>

Пример

Давайте создадим объект с определённым часовым поясом:

<?php use App\Entity\Article; use DateTime; use DateTimeZone; $article = new Article(); $article->setCreatedAt( new DateTime('2024-01-01 12:00:00', new DateTimeZone('Europe/Moscow')) ); echo $article->getCreatedAt()->format('Y-m-d H:i:s e'); ?>

Результат выполнения кода:

"2024-01-01 12:00:00 Europe/Moscow"

Пример

Давайте посмотрим, как Doctrine восстанавливает часовой пояс после сохранения и чтения из базы данных:

<?php use App\Entity\Article; use DateTime; use DateTimeZone; $article = new Article(); $article->setCreatedAt( new DateTime('2024-01-01 12:00:00', new DateTimeZone('Europe/Moscow')) ); $entityManager->persist($article); $entityManager->flush(); $id = $article->getId(); $entityManager->clear(); $res = $entityManager->find(Article::class, $id); echo $res->getCreatedAt()->getTimezone()->getName(); ?>

Результат выполнения кода:

"Europe/Moscow"

Как видим, часовой пояс Europe/Moscow сохранился вместе со значением даты и времени.

Смотрите также

  • поле datetime,
    которое хранит дату и время без часового пояса
  • поле datetimetz_immutable,
    которое хранит неизменяемую дату и время с часовым поясом
  • поле date,
    которое хранит только дату
  • поле time,
    которое хранит только время
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить