Date timezone set: примеры (PHP)
date_timezone_set(DateTime $object, DateTimeZone $timezone): DateTimeФункция date_timezone_set устанавливает часовой пояс для объекта DateTime. Применяется для изменения временной зоны существующего объекта даты и времени. Это позволяет конвертировать момент времени в другое представление согласно правилам заданного часового пояса.
- object - обязательный параметр, объект DateTime, который создается функцией date_create().
- timezone - обязательный параметр, объект DateTimeZone, представляющий желаемый часовой пояс.
Функция возвращает модифицированный объект DateTime или false в случае возникновения ошибки.
Установка часового пояса при работе с объектом DateTime:
$date = date_create('2024-01-15 14:30:00', timezone_open('UTC'));
echo date_format($date, 'Y-m-d H:i:sP');
$timezone = timezone_open('Europe/Moscow');
$newDate = date_timezone_set($date, $timezone);
echo date_format($newDate, 'Y-m-d H:i:sP');2024-01-15 14:30:00+00:00 2024-01-15 17:30:00+03:00
Использование с различными часовыми поясами:
$original = date_create('2024-06-01 12:00:00');
$timezones = ['America/New_York', 'Asia/Tokyo', 'Australia/Sydney'];
foreach ($timezones as $tz) {
$dt = clone $original;
date_timezone_set($dt, timezone_open($tz));
echo date_format($dt, 'H:i:s') . ' (' . $tz . ')' . PHP_EOL;
}08:00:00 (America/New_York) 21:00:00 (Asia/Tokyo) 22:00:00 (Australia/Sydney)
Объектно-ориентированный аналог функции. Метод изменяет часовой пояс объекта DateTime. Предпочтительнее в современном объектном коде.
$date = new DateTime('now', new DateTimeZone('UTC'));
$date->setTimezone(new DateTimeZone('Europe/Berlin'));
echo $date->format('Y-m-d H:i:sP');Устанавливает часовой пояс по умолчанию для всех функций даты/времени в скрипте. Используется для глобальной настройки, а не для отдельных объектов.
Компонент международного форматирования дат с поддержкой часовых поясов. Применяется при работе с локалями и сложным форматированием.
Date timezone set в Python
Модуль pytz или zoneinfo (Python 3.9+). Изменение часового пояса создает новый объект datetime.
from datetime import datetime
from zoneinfo import ZoneInfo
utc_dt = datetime(2024, 1, 15, 14, 30, tzinfo=ZoneInfo('UTC'))
moscow_dt = utc_dt.astimezone(ZoneInfo('Europe/Moscow'))
print(moscow_dt.isoformat())2024-01-15T17:30:00+03:00
Date timezone set в Javascript
Объект Date не содержит информации о часовом поясе. Преобразование выполняется через методы toLocaleString с указанием локали или библиотекой moment.js.
const date = new Date('2024-01-15T14:30:00Z');
console.log(date.toLocaleString('ru-RU', { timeZone: 'Europe/Moscow' }));Date timezone set в MySQL
Функция CONVERT_TZ преобразует значение datetime из одного часового пояса в другой. Требует предварительной загрузки таблиц часовых поясов.
SELECT CONVERT_TZ('2024-01-15 14:30:00', '+00:00', '+03:00');$result = date_timezone_set('not an object', timezone_open('UTC'));
var_dump($result);Warning: date_timezone_set() expects parameter 1 to be DateTime, string given bool(false)
$date = date_create();
$result = date_timezone_set($date, timezone_open('Invalid/Timezone'));
if ($result === false) {
echo 'Ошибка установки часового пояса';
}Ошибка установки часового пояса
$date = date_create('now', timezone_open('UTC'));
date_timezone_set($date, timezone_open('Europe/Moscow'));
echo date_format($date, 'e');Europe/Moscow
В PHP 8.0 функция стала строго типизированной. Типы аргументов ожидаются DateTime и DateTimeZone соответственно. Передача неверных типов вызывает TypeError вместо предупреждения.
// PHP 7
$result = @date_timezone_set('string', null); // Возвращает false
// PHP 8
try {
date_timezone_set('string', null);
} catch (TypeError $e) {
echo $e->getMessage();
}date_timezone_set(): Argument #1 ($object) must be of type DateTime, string given
$dates = [
date_create('2024-03-01 10:00:00', timezone_open('America/Los_Angeles')),
date_create('2024-06-15 18:30:00', timezone_open('Asia/Dubai')),
date_create('2024-12-05 23:45:00', timezone_open('Pacific/Auckland'))
];
$targetTz = timezone_open('Europe/London');
$converted = [];
foreach ($dates as $date) {
$converted[] = date_timezone_set(clone $date, $targetTz);
}
foreach ($converted as $dt) {
echo date_format($dt, 'Y-m-d H:i:s e') . PHP_EOL;
}$tz = timezone_open('Europe/London');
$date = date_create('2024-03-31 00:30:00', $tz);
echo date_format($date, 'Y-m-d H:i:s T') . '\n';
date_timezone_set($date, timezone_open('Europe/Moscow'));
echo date_format($date, 'Y-m-d H:i:s T');2024-03-31 00:30:00 GMT 2024-03-31 03:30:00 MSK
$date = date_create('2024-01-01 00:00:00', timezone_open('UTC'));
$interval = date_interval_create_from_date_string('+5 hours');
date_add($date, $interval);
date_timezone_set($date, timezone_open('Asia/Yekaterinburg'));
echo date_format($date, 'Y-m-d H:i:s e');2024-01-01 10:00:00 Asia/Yekaterinburg
try {
$dt = new DateTime('now');
$tz = new DateTimeZone('Invalid/Zone');
date_timezone_set($dt, $tz);
} catch (Exception $e) {
echo 'Исключение: ' . $e->getMessage();
}