← К документации

Ядро

DateTime и даты

Рабочая справка по датам в Bitrix Framework: Bitrix\Main\Type\DateTime, createFromUserTime, createFromTimestamp, toString и фильтры ORM.

В D7 лучше передавать даты как объекты Bitrix\Main\Type\DateTime, особенно в ORM-фильтрах. Строки тоже часто работают, но объект обычно надёжнее и понятнее.

Преобразование toUserTime() изменяет объект даты. Если исходное серверное значение ещё нужно, работайте с клоном. В CLI часовой пояс пользователя не появляется автоматически.

Основы

В 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;

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 (clone $date_time)->toUserTime();
}

$date_time = new DateTime();
$user_date_time = convertDateToUserTime($date_time);

echo $user_date_time->toString();

Источники