Работа с датой и временем

Модуль расширенного управления меню для битрикс

Июнь 14, 2018

Теги: Основное

Работа с датой и временем средствами классов "\Bitrix\Main\Type\Date" и "\Bitrix\Main\Type\DateTime".

Класс "\Bitrix\Main\Type\DateTime" является расширением класса "\Bitrix\Main\Type\Date".

Создание объекта "\Bitrix\Main\Type\DateTime" из формата сайта:


$dateTime = new \Bitrix\Main\Type\DateTime("14.06.2018 02:20:00");

Создание объекта "\Bitrix\Main\Type\DateTime" из произвольного формата:


$dateTime = new \Bitrix\Main\Type\DateTime("2018-06-14 02:20:00","Y-m-d H:i:s");

Создание объекта "\Bitrix\Main\Type\Date" из формата сайта:


$date = new \Bitrix\Main\Type\Date("14.06.2018");

Создание объекта "\Bitrix\Main\Type\DateTime" из произвольного формата с проверкой на ошибочный формат:


try {

    
$sendTime = new \Bitrix\Main\Type\DateTime($orderTime"Y-m-d H:i:s");
} catch (
\Bitrix\Main\SystemException $e) {
    
$errors[] = "Неправильный формат даты" //$e->getMessage();
}

Создание объекта "\Bitrix\Main\Type\DateTime" из произвольного формата с указанием часового пояса (часовой пояс указывается в формате php \DateTimeZone):


$timeZone = new \DateTimeZone('Europe/Moscow');

$dateTime = new \Bitrix\Main\Type\DateTime("2018-06-14 02:20:00","Y-m-d H:i:s",$timeZone);

Получение формата даты/времени текущего сайта или настроек в админ. части:


\Bitrix\Main\Type\DateTime::getFormat() // результат, например, "d.m.Y H:i:s"

Создание объекта "\Bitrix\Main\Type\DateTime" из unix timestamp:


$dateTime \Bitrix\Main\Type\DateTime::createFromTimestamp(1528933753);

Создание объекта "\Bitrix\Main\Type\DateTime" из php \DateTime:


$phpDateTime = new DateTime('2018-01-01');

$dateTime \Bitrix\Main\Type\DateTime::createFromPhp($phpDateTime);

Создание объекта "\Bitrix\Main\Type\DateTime" из времени заданного строкой:


$dateTime \Bitrix\Main\Type\Date::createFromText("вчерашнее утро");

Время в формате текущего сайта:


$dateTime->toString()

Время в формате unix timestamp:


$dateTime->getTimestamp()

Время в произвольном формате:


$dateTime->format("Y-m-d H:i:s")

Вывод времени в формате текущего сайта с проверкой объекта:


if($dateTime instanceof \Bitrix\Main\Type\DateTime || $dateTime instanceof \Bitrix\Main\Type\Date
     echo 
$dateTime->toString();

Вывод времени в формате сайта "s4", в случае, если это не текущий сайт:


$siteResult \Bitrix\Main\SiteTable::getList(array(

    
'filter' => array('=LID'=>'s4'),
    
'select' => array('CULTURE_ID'),
    
'limit' => 1,
));
if(
$site $siteResult->fetch())
{
    
$cultureFields \Bitrix\Main\Localization\CultureTable::getById($site['CULTURE_ID'])->fetch();
    
$culture = new \Bitrix\Main\Context\Culture($cultureFields);
    echo 
$dateTime->toString($culture);
}

Вывод времени в формате, заданном с помощью региональных настроек:


$culture = new \Bitrix\Main\Context\Culture(array(

    
"FORMAT_DATE" => "MM/DD/YYYY",
    
"FORMAT_DATETIME" => "MM/DD/YYYY HH:MI:SS",
    
"FORMAT_NAME" => "#NAME# #LAST_NAME#",
    
"CHARSET" => "UTF-8",
    
"DIRECTION" => 'Y',
    
"WEEK_START" => 0
));
//$culture = \Bitrix\Main\Context::getCurrent()->getCulture(); // текущие региональные настройки
echo $dateTime->toString($culture);

Также можно получить формат даты/времени из региональных настроек (в формате битрикс):


$culture->getDateFormat() // MM/DD/YYYY

// или 
$culture->getDateTimeFormat() // MM/DD/YYYY HH:MI:SS

Или в формате php:


\Bitrix\Main\Type\Date::getFormat($culture// m/d/Y

или 
\Bitrix\Main\Type\DateTime
::getFormat($culture// m/d/Y H:i:s

Сложение и вычитание дат с использованием читаемого формата:


$dateTime->add("1 year + 3 months - 5 seconds");

Сложение и вычитание дат с использованием формата DateInterval:


$dateTime->add("1YT1200S");

Получение текущей временной зоны объекта:


$dateTime->getTimeZone()

/*
DateTimeZone Object
(
    [timezone_type] => 3
    [timezone] => Europe/Moscow
)
*/

Установка текущей временной зоны объекта:


$timeZone = new \DateTimeZone('Europe/Moscow');

$dateTime->setTimeZone($timeZone);

Установка временной зоны по умолчанию:


$dateTime->setDefaultTimeZone();

Создание объекта "\Bitrix\Main\Type\DateTime" из локального времени пользователя с переводом в глобальные настройки сервера:


$dateTime =\Bitrix\Main\Type\DateTime::createFromUserTime("14.06.2018 02:20:00");

Время с учетом настроек пользователя:


$dateTime->toUserTime()

Перевести формат времени из формата битрикс в формат php:


\Bitrix\Main\Type\DateTime::convertFormatToPhp('YYYY-MM-DD HH-MI-SS'// "Y-m-d H-i-s"

Проверка на корректность даты:


\Bitrix\Main\Type\DateTime::isCorrect("2018-06-14 02:20:00","Y-m-d H:i:s")

См. также:

← Переход к списку