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

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

Описание

Вся работа с датами через 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__."<br>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-2023, «1С-Битрикс», 2023
Наверх