← Назад к справке

Ядро

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();

Источники