Документация для разработчиков
Темная тема

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

Описание

Вся работа с датами через API (вставки, выборки, фильтры и т.п.) производится в формате текущего сайта или, если в администартивной части, в формате текущего языка.

Для работы с датой и временем используются следующие функции:

При задании формата даты и времени используются следующие обозначения:

  • YYYY - год
  • MM - месяц
  • DD - день
  • HH - часы
  • MI - минуты
  • SS - секунды

С версии 11.5.4 главного модуля включена поддержка 12-часового формата времени и некоторые новые отображения месяца:

  • MMMM - полный месяц (использовать только для вывода);
  • M - первые 3 буквы месяца;
  • G - час от 1-12 (без ведущего нуля);
  • GG - 0-23 (без ведущего нуля);
  • H - 01-12;
  • HH - 00-23;
  • TT - отображением AM/PM (верхний регистр);
  • T - am/pm.

Методы, используемые в SQL запросах

  • CDatabase::CharToDateFunction - возвращает SQL код для преобразования строки во время формата базы данных.

    <?
    $strSql = "
    	SELECT 
    		ID
    	FROM 
    		my_table
    	WHERE 
    		DATE_CREATE <= ".$DB->CharToDateFunction("10.01.2003 23:59:59")."
    	";
    $rs = $DB->Query($strSql, false, $err_mess.__LINE__);
    ?>

  • CDatabase::DateToCharFunction - возвращает SQL код для преобразования время из формата базы данных в строку.

    <?
    $strSql = "
    	SELECT 
    		ID, 
    		".$DB->DateToCharFunction("DATE_CREATE")." DATE_CREATE 
    	FROM 
    		my_table
    	";
    $rs = $DB->Query($strSql, false, $err_mess.__LINE__);
    ?>

  • CDatabase::CurrentDateFunction - возвращает SQL код для получения текущей даты.

    <?
    $strSql = "
    	SELECT 
    		ID 
    	FROM 
    		my_table 
    	WHERE 
    		DATE_CREATE<=".$DB->CurrentDateFunction()
    	";
    $rs = $DB->Query($strSql, false, $err_mess.__LINE__);
    ?>

  • CDatabase::CurrentTimeFunction - возвращает SQL код для получения текущего времени в формате базы данных.

    <?
    $strSql = "
    	UPDATE my_table SET 
    		TIME_CHANGE=".$DB->CurrentTimeFunction()."
    	WHERE 
    		ID=45
    	";
    $Query($strSql, false, "FILE: ".__FILE__."
    LINE: ".__LINE__); ?>

  • CDatabase::DatetimeToTimestampFunction - возвращает валидный timestamp без обращения к MakeTimeStamp.

    <?
    $strSql = "
    	SELECT 
    		ID, 
    		".$DB-> DatetimeToTimestampFunction("DATE_CREATE")." DATE_CREATE
    	FROM 
    		my_table
    	";
    $rs = $DB->Query($strSql, false, $err_mess.__LINE__);
    ?>

Конвертация форматов

  • CDataBase::DateFormatToPHP - конвертирует формат допустимый в настройках сайта в формат принятый в PHP.

    <?
    echo $DB->DateFormatToPHP("DD.MM.YYYY HH:MI:SS"); // d.m.Y H:i:s
    ?>

  • CDataBase::FormatDate - конвертирует время из строки одного формата в строку произвольного формата.

    <?
    echo $DB->FormatDate("31.12.2005", "DD.MM.YYYY", "YYYY-MM-DD"); // 2005-12-31
    ?>

  • ConvertDateTime - конвертирует время из строки в формате сайта в строку произвольного формата.

    <?
    echo ConvertDateTime("25.12.2003", "YYYY-MM-DD", "ru"); // 2003-12-25
    ?>

  • MakeTimeStamp - конвертирует время из строки в Unix-формат.

    <?
    echo MakeTimeStamp("07.04.2005 11:32:00", "DD.MM.YYYY HH:MI:SS"); // 1112862720
    ?>

  • ConvertTimeStamp - конвертирует время из Unix-формата в строку в формате сайта.

    <?
    echo ConvertTimeStamp(mktime(0, 0, 0, 10, 25, 2003), "SHORT", "ru"); // 25.10.2003
    ?>

Дополнительные функции

  • CDataBase::IsDate - проверяет дату заданную в виде строки на корректность.

    <?
    echo $DB->IsDate("12.10.2005 22:34:15", "DD.MM.YYYY HH:MI:SS") ? "OK" : "ERROR"; // OK
    echo $DB->IsDate("12.13.2005 22:34:15", "DD.MM.YYYY HH:MI:SS") ? "OK" : "ERROR"; // ERROR
    echo $DB->IsDate("12.13..2005 ABS", "DD.MM.YYYY HH:MI:SS") ? "OK" : "ERROR"; // ERROR
    ?>

  • CDataBase::CompareDates - сравнивает между собой две даты заданные как строки.

    <?
    echo $DB->CompareDates("01.01.2005", "01.01.2006"); // -1
    echo $DB->CompareDates("01.01.2006", "01.01.2005"); // 1
    echo $DB->CompareDates("01.01.2006", "01.01.2006"); // 0
    ?>

  • AddToTimeStamp - добавляет к дате в Unix-формате заданный интервал времени.

    <?
    $stmp = MakeTimeStamp("07.04.2005 11:32:00", "DD.MM.YYYY HH:MI:SS");
    $stmp = AddToTimeStamp(array("DD" => -1, "MM" => 1), $stmp); // 1115454720
    echo date("d.m.Y H:i:s", $stmp); // 06.05.2005 11:32:00
    ?>

  • ParseDateTime - возвращает ассоциированный массив описывающий дату заданную в виде строки.

    <?
    if ($arr = ParseDateTime("21.01.2004 23:44:15", "DD.MM.YYYY HH:MI:SS"))
    {
    	echo "День:    ".$arr["DD"]."<br>";    // День: 21
    	echo "Месяц:   ".$arr["MM"]."<br>";    // Месяц: 1
    	echo "Год:     ".$arr["YYYY"]."<br>";  // Год: 2004
    	echo "Часы:    ".$arr["HH"]."<br>";    // Часы: 23
    	echo "Минуты:  ".$arr["MI"]."<br>";    // Минуты: 44
    	echo "Секунды: ".$arr["SS"]."<br>";    // Секунды: 15
    }
    else echo "Ошибка!";
    ?>

  • getmicrotime - возвращает текущее время в Unix-формате.

    <?
    echo getmicrotime(); // 1115454720
    ?>

  • GetDateFormat - Возвращает формат даты (времени) сайта.

    <?
    // выводит текущую дату в формате текущего сайта
    echo date($DB->DateFormatToPHP(CSite::GetDateFormat("SHORT")), time());
    ?>

  • GetTimeFormat - Возвращает формат времени, указанный в настройках сайта.

    <?
    echo $GLOBALS["DB"]->DateFormatToPHP( CSite::GetTimeFormat() );
    ?>



Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
3
Юлия Маменко
В более поздней версии проблема с падежами решена. Пример использования:

Код
$arParams["ACTIVE_DATE_FORMAT"]="j F Y";
// $arItem["PROPERTIES"]["DATE"]["VALUE"] - произвольное свойство типа дата
CIBlockFormatProperties::DateFormat($arParams["ACTIVE_DATE_FORMAT"], MakeTimeStamp($arItem["PROPERTIES"]["DATE"]["VALUE"], CSite::GetDateFormat()));
1
Екатерина Богданова
в версии 11.5.7 полный месяц это не MMMM, а F
2
Роберт Басыров
По умолчанию дата выводится в формате 23 декабрь 2008 г., декабрь 23, 2008 г. ТО есть месяц - в именительном падеже. Если необходимо вывести дату в формате: 23 декабр(я) 2008 г., 15 ноябр(я) 2008 г., то:

Код
function EditData ($DATA) // конвертирует формат даты с 04.11.2008 в 04 Ноября, 2008
{
$MES = array( 
"01" => "Января", 
"02" => "Февраля", 
"03" => "Марта", 
"04" => "Апреля", 
"05" => "Мая", 
"06" => "Июня", 
"07" => "Июля", 
"08" => "Августа", 
"09" => "Сентября", 
"10" => "Октября", 
"11" => "Ноября", 
"12" => "Декабря"
);
$arData = explode(".", $DATA); 
$d = ($arData[0] < 10) ? substr($arData[0], 1) : $arData[0];

$newData = $d." ".$MES[$arData[1]].", ".$arData[2]; 
return $newData;
}
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх