Дата и время
Bitrix Framework работает с датой и временем с помощью двух классов:
-
Bitrix\Main\Type\Date— для даты, -
Bitrix\Main\Type\DateTime— для даты и времени.
use Bitrix\Main\Type\Date;
use Bitrix\Main\Type\DateTime;
$date = new Date('25.11.2025', 'd.m.Y');
$datetime = new DateTime('25.11.2025 14:30:00', 'd.m.Y H:i:s');
echo $date->format('d.m.Y H:i:s'); // 25.11.2025 00:00:00
echo $datetime->format('d.m.Y H:i:s'); // 25.11.2025 14:30:00
Классы основаны на стандартном PHP-классе \DateTime, но учитывают региональные настройки и часовой пояс продукта Битрикс.
Формат вывода
Классы Date и DateTime выводят дату в формате сайта. Задать формат можно при создании объекта. Если не указать формат, классы возьмут его из региональных настроек.
Региональные настройки хранит объект Bitrix\Main\Context\Culture. Классы получают эти настройки через \Bitrix\Main\Context::getCurrent()->getCulture().
-
Culture::getDateFormat()— возвращает формат короткой даты, например,DD.MM.YYYY. -
Culture::getDateTimeFormat()— возвращает формат даты и времени.
Классы Date и DateTime используют эти методы, чтобы показывать дату в привычном для пользователя виде.
Преобразование формата
Классы используют метод convertFormatToPhp, чтобы преобразовать региональные настройки в формат PHP.
| Маска в настройках | Маска PHP | Описание |
|---|---|---|
YYYY |
Y |
Год |
MMMM |
F |
Полное название месяца |
MM |
m |
Месяц с ведущим нулем |
DD |
d |
День с ведущим нулем |
TT / T |
A / a |
AM / PM |
MI |
i |
Минуты |
SS |
s |
Секунды |
HH |
H |
Час в 24-часовом формате |
H |
G |
Час без ведущего нуля |
GG |
h |
Час в 12-часовом формате |
G |
g |
Час в 12-часовом формате без нуля |
Класс Date
Класс Bitrix\Main\Type\Date хранит только дату. Такой формат подходит для даты рождения, сроков акций или других событий без указания времени.
Создать объект даты
Конструктор new Date($time, $format) создает объект даты. Примеры:
-
new Date()— текущая дата сервера. -
new Date('25.12.2023')— дата из строки. Класс автоматически использует формат из настроек сайта, например,DD.MM.YYYY. -
new Date('2023-12-25', 'YYYY-MM-DD')— дата из строки с указанным форматом.
Если строка имеет неверный формат, конструктор выбрасывает исключение Main\ObjectException.
После создания система устанавливает объекту время 00:00:00.
Создать дату из объекта
Класс Date предоставляет именованные конструкторы для создания объектов из разных источников.
-
createFromPhp(\DateTime $datetime)— создает объектDateиз объекта\DateTime. Время сбрасывает в00:00:00.use Bitrix\Main\Type\Date; $phpDate = new \DateTime('2025-11-25 14:30:00'); $date = Date::createFromPhp($phpDate); // 2025-11-25 00:00:00 -
createFromTimestamp($timestamp)— создает объектDateиз метки времени.use Bitrix\Main\Type\Date; $timestamp = strtotime('2025-11-25'); $date = Date::createFromTimestamp($timestamp); -
createFromText($text)— создает объектDateиз текста. Вернетnull, если не сможет распарсить текст. Метод учитывает текущий язык сайта и понимает фразы на этом языке, например,tomorrowилисегодня вечером.use Bitrix\Main\Type\Date; $date = Date::createFromText('end of next week'); if ($date === null) { // Не удалось разобрать текст }
Методы
Форматировать дату
Метод format($format) форматирует дату по маске PHP.
$format— строка формата PHP.
use Bitrix\Main\Type\Date;
$date = new Date('2025-11-25', 'Y-m-d');
echo $date->format('d.m.Y'); // 25.11.2025
Преобразовать в строку
Метод toString() преобразует строку в дату с учетом региональных настроек сайта.
use Bitrix\Main\Type\Date;
$date = new Date('2025-11-25', 'Y-m-d');
echo $date; // 25.11.2025 при формате сайта DD.MM.YYYY
Подробнее о региональных настройках в статье Локализация
Изменить дату на интервал
Метод add($interval) изменяет дату на заданный интервал. Вызов метода изменяет и возвращает этот же объект.
$interval— строка интервала. Указать смещение можно словамиyears,months,days,weeks,hours,minutes,secondsсо знаками+/-или в формате DateInterval.
use Bitrix\Main\Type\Date;
// Добавить 10 дней в формате DateInterval
$date1 = new Date('01.02.2025', 'd.m.Y');
$date1->add('P10D');
echo $date1; // 11.02.2025
// Вычесть 1 месяц в формате DateInterval
$date2 = new Date('01.02.2025', 'd.m.Y');
$date2->add('-P1M');
echo $date2; // 01.01.2025
// Добавить 5 дней в текстовом формате
$date3 = new Date('01.02.2025', 'd.m.Y');
$date3->add('+5 days');
echo $date3; // 06.02.2025
Установить дату
Метод setDate($year, $month, $day) устанавливает новую дату.
-
$year— год. -
$month— месяц. -
$day— день.
use Bitrix\Main\Type\Date;
$date = new Date();
$date->setDate(2025, 5, 1);
echo $date; // 01.05.2025
Получить метку времени timestamp
Метод getTimestamp() возвращает метку времени timestamp для даты.
use Bitrix\Main\Type\Date;
$date = new Date('2025-11-25', 'Y-m-d');
echo $date->getTimestamp(); // 1742947200
Получить интервал между датами
Метод getDiff(Date $time) возвращает интервал \DateInterval между двумя датами.
use Bitrix\Main\Type\Date;
$d1 = new Date('2025-01-01', 'Y-m-d');
$d2 = new Date('2025-01-10', 'Y-m-d');
$diff = $d2->getDiff($d1);
echo $diff->days; // 9
Проверить строку
Метод isCorrect($time, $format = null) проверяет строку. Возвращает true, если строка содержит корректную дату.
use Bitrix\Main\Type\Date;
if (Date::isCorrect('31.02.2025', 'd.m.Y'))
{
// Код не выполнится, так как дата неверна
}
Класс DateTime
Класс Bitrix\Main\Type\DateTime расширяет Date — добавляет работу со временем и часовыми поясами.
Создать объект даты и времени
Конструктор создает объект даты со временем.
new DateTime(?string $time = null, ?string $format = null, ?DateTimeZone $timezone = null)
-
$time— строка с датой и временем. По умолчанию — текущее время. -
$format— формат для разбора строки. Если не передать формат, метод использует текущий региональный формат из настроек сайта. -
$timezone— часовой пояс. По умолчанию использует пояс сервера.
Примеры:
use Bitrix\Main\Type\DateTime;
// Текущее время
$dt1 = new DateTime();
// Время из строки
$dt2 = new DateTime('2025-11-25 14:30:15', 'Y-m-d H:i:s');
// Время из строки с указанием часового пояса
$dt3 = new DateTime('2025-11-25 14:30:15+03:00', \DateTime::ATOM);
Создать дату и время из объекта
Класс DateTime предоставляет именованные конструкторы для создания объектов из разных источников.
-
createFromPhp(\DateTime $datetime)— создает объектDateTimeиз стандартного объекта PHP\DateTime.use Bitrix\Main\Type\DateTime; $phpDt = new \DateTime('2025-11-25 14:30:00', new \DateTimeZone('UTC')); $dt = DateTime::createFromPhp($phpDt); -
createFromTimestamp($timestamp)— создает объектDateTimeиз метки времениtimestamp. Метод берет часовой пояс из настроек PHP.use Bitrix\Main\Type\DateTime; $dt = DateTime::createFromTimestamp(time()); -
tryParse($timeString, $format = null)— пытается создать объектDateTimeиз строки. В отличие от конструктора, метод не выбрасывает исключение. Он возвращает объектDateTimeилиnull.use Bitrix\Main\Type\DateTime; $dt = DateTime::tryParse($request['DATE'], 'd.m.Y H:i'); if ($dt === null) { // Строка имеет неверный формат }
Методы
Класс DateTime наследует методы класса Date и добавляет свои.
Задать время
Метод setTime($hour, $minute, $second = 0, $microseconds = 0) задает время.
use Bitrix\Main\Type\DateTime;
$dt = new DateTime('2025-11-25', 'Y-m-d');
$dt->setTime(9, 30);
echo $dt->format('d.m.Y H:i'); // 25.11.2025 09:30
Управлять часовыми поясами объекта
-
getTimeZone()— возвращает текущий часовой пояс объекта. -
setTimeZone(\DateTimeZone $timezone)— устанавливает новый часовой пояс.use Bitrix\Main\Type\DateTime; $dt = new DateTime('2025-11-25 12:00:00', 'Y-m-d H:i:s'); $dt->setTimeZone(new \DateTimeZone('Europe/Berlin')); -
setDefaultTimeZone()— сбрасывает часовой пояс на пояс сервера по умолчанию.
Работа с часовыми поясами пользователя
Система хранит время в часовом поясе сервера. Пользователь видит время с учетом его локального часового пояса.
Настройка
Настроить часовые пояса можно в административном разделе на странице Настройки > Настройки продукта > Настройки модулей > Главный модуль.

-
Локальное время сервера — показывает время, дату и часовой пояс сервера.
-
Разрешить использование часовых поясов — включает поддержку часовых поясов в продукте. После включения класс
CTimeZoneопределяет отличие времени пользователя от времени сервера. -
Часовой пояс сервера по умолчанию — устанавливает часовой пояс сервера. Можно оставить локальное время сервера или выбрать вручную.
-
По умолчанию автоматически определять часовой пояс по браузеру — определяет часовой пояс пользователя через браузер
Intl.DateTimeFormatи сохраняет его в cookies. Пользователь также может указать свой часовой пояс в профиле, в этом случае система будет использовать значение из профиля.
Методы конвертации времени
В классе DateTime есть два метода для конвертации времени в нужный часовой пояс.
createFromUserTime($timeString)— создает объект Даты и времени в часовом поясе сервера из строки с датой и временем в часовом поясе пользователя.
use Bitrix\Main\Type\DateTime;
// Пользователь из Москвы (UTC+3) вводит своё текущее время - "25.11.2025 18:00"
$serverTime = DateTime::createFromUserTime('25.11.2025 18:00');
// Сервер в Лондоне (UTC+0). Там сейчас 15:00
$serverTime->format('H:i'); // "15:00"
toUserTime()— изменяет время текущего объекта на часового пояса пользователя.
use Bitrix\Main\Type\DateTime;
// Сервер в Лондоне (UTC+0)
$serverTime = new DateTime('2025-11-25 12:00:00', 'Y-m-d H:i:s');
// Пользователь в Москве (UTC+3)
echo $serverTime->toUserTime()->format('H:i'); // "15:00"
Автоматический перевод времени
Класс DateTime автоматически переводит время в часовой пояс пользователя при преобразовании объекта в строку, если в настройках сайта включены часовые пояса.
use Bitrix\Main\Type\DateTime;
// Сервер в Лондоне (UTC+0)
$date = new DateTime('2025-11-25 12:00:00', 'Y-m-d H:i:s');
// Пользователь в Москве (UTC+3)
echo $date; // Автоматически выведет "25.11.2025 15:00:00"
Чтобы показывать исходное серверное время, отключите автоматический перевод. Это нужно для логов, отладки и системных событий.
use Bitrix\Main\Type\DateTime;
$dt = $row['TIMESTAMP_X'];
$dt->disableUserTime();
echo $dt; // Выведет серверное время
Чтобы снова включить перевод, используйте метод enableUserTime(). Проверить текущее состояние можно методом isUserTimeEnabled().