Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как перевести время в другой часовой пояс

Короткий ответ

Создайте дату в исходном поясе и вызовите setTimezone():

<?php
 
$utc = new DateTimeImmutable('2026-03-15 12:00', new DateTimeZone('UTC'));
 
echo $utc->setTimezone(new DateTimeZone('Europe/Paris'))->format('Y-m-d H:i'), "\n";
echo $utc->setTimezone(new DateTimeZone('Asia/Tokyo'))->format('Y-m-d H:i');

Результат:

2026-03-15 13:00
2026-03-15 21:00

Храните время в UTC

В базе данных время хранят в UTC, а в пояс пользователя переводят только при выводе. Момент времени при этом не меняется — меняется лишь его запись:

<?php
 
$utc = new DateTimeImmutable('2026-03-15 12:00', new DateTimeZone('UTC'));
$tokyo = $utc->setTimezone(new DateTimeZone('Asia/Tokyo'));
 
var_dump($utc == $tokyo);
var_dump($utc->getTimestamp() === $tokyo->getTimestamp());

Результат:

bool(true)
bool(true)

Функции из этого ответа

  • DateTimeImmutable — Объект даты и времени, который нельзя изменить: каждое действие возвращает новый объект.
  • date_default_timezone_set — Задаёт часовой пояс для всех функций даты.
  • date — Форматирует дату и время.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.