Ядро
DateTime и даты
Рабочая справка по датам в Bitrix Framework: Bitrix\Main\Type\DateTime, createFromUserTime, createFromTimestamp, toString и фильтры ORM.
В D7 лучше передавать даты как объекты Bitrix\Main\Type\DateTime, особенно в
ORM-фильтрах. Строки тоже часто работают, но объект обычно надёжнее и понятнее.
Основы
В Bitrix Framework для даты и времени используется Bitrix\Main\Type\DateTime.
Bitrix DateTime
DateTime расширяет класс Date и используется во многих полях
ядра и модулей.
<?php
use Bitrix\Main\Type\DateTime;
/**
* Возвращает текущую дату и время.
*/
function fetchCurrentDateTime(): DateTime
{
return new DateTime();
}
$date_time = fetchCurrentDateTime();
echo $date_time->toString(); Создать дату
<?php
use Bitrix\Main\Type\DateTime;
/**
* Создаёт дату из timestamp.
*/
function createDateFromTimestamp(int $timestamp): DateTime
{
return DateTime::createFromTimestamp($timestamp);
}
/**
* Создаёт дату из строки пользовательского времени.
*/
function createDateFromUserTime(string $date_time): DateTime
{
return DateTime::createFromUserTime($date_time);
}
$date_from_timestamp = createDateFromTimestamp(strtotime('+1 day'));
$date_from_user_time = createDateFromUserTime('26.04.2026 12:00:00');
echo $date_from_timestamp->toString();
echo $date_from_user_time->toString(); Вывести строкой
<?php
use Bitrix\Main\Type\DateTime;
/**
* Возвращает дату строкой.
*/
function formatBitrixDateTime(DateTime $date_time): string
{
return $date_time->toString();
}
$date_time = new DateTime();
echo formatBitrixDateTime($date_time); Фильтры
В ORM-фильтрах даты удобно передавать объектами DateTime.
Дата в ORM-фильтре
<?php
use Bitrix\Main\UserTable;
use Bitrix\Main\Type\DateTime;
/**
* Получает пользователей, созданных после даты.
*/
function fetchUsersCreatedAfter(DateTime $date_time): array
{
return UserTable::getList([
'select' => [
'ID',
'LOGIN',
'DATE_REGISTER',
],
'filter' => [
'>=DATE_REGISTER' => $date_time,
],
'order' => [
'ID' => 'ASC',
],
'limit' => 100,
])->fetchAll();
}
$date_time = DateTime::createFromTimestamp(strtotime('-7 days'));
$users = fetchUsersCreatedAfter($date_time);
print_r($users); Диапазон дат
<?php
use Bitrix\Main\UserTable;
use Bitrix\Main\Type\DateTime;
/**
* Получает пользователей за период.
*/
function fetchUsersByDateRange(DateTime $date_from, DateTime $date_to): array
{
return UserTable::getList([
'select' => [
'ID',
'LOGIN',
'DATE_REGISTER',
],
'filter' => [
'>=DATE_REGISTER' => $date_from,
'<=DATE_REGISTER' => $date_to,
],
'order' => [
'DATE_REGISTER' => 'ASC',
],
])->fetchAll();
}
$date_from = DateTime::createFromUserTime('01.04.2026 00:00:00');
$date_to = DateTime::createFromUserTime('30.04.2026 23:59:59');
$users = fetchUsersByDateRange($date_from, $date_to);
print_r($users); Время пользователя
В проектах с часовыми поясами важно различать серверное время и время пользователя.
createFromUserTime
createFromUserTime() создаёт дату из строки локального времени пользователя
с учётом настроек времени.
<?php
use Bitrix\Main\Type\DateTime;
/**
* Создаёт дату из пользовательской строки.
*/
function parseUserDateTime(string $date_time): DateTime
{
return DateTime::createFromUserTime($date_time);
}
$date_time = parseUserDateTime('26.04.2026 18:30:00');
echo $date_time->toString(); toUserTime
toUserTime() переводит время из серверного в пользовательское.
<?php
use Bitrix\Main\Type\DateTime;
/**
* Возвращает дату во времени пользователя.
*/
function convertDateToUserTime(DateTime $date_time): DateTime
{
return $date_time->toUserTime();
}
$date_time = new DateTime();
$user_date_time = convertDateToUserTime($date_time);
echo $user_date_time->toString();