Работа с датой и временем
Описание
Вся работа с датами через API (вставки, выборки, фильтры и т.п.) производится в формате текущего сайта или, если в администартивной части, в формате текущего языка.
Для работы с датой и временем используются следующие функции:
- CDatabase::CharToDateFunction
- CDatabase::DateToCharFunction
- CDatabase::CurrentDateFunction
- CDatabase::CurrentTimeFunction
- CDataBase::DateFormatToPHP
- CDataBase::DatetimeToTimestampFunction
- CDataBase::FormatDate
- ConvertDateTime
- MakeTimeStamp
- ConvertTimeStamp
- CDataBase::IsDate
- CDataBase::CompareDates
- AddToTimeStamp
- ParseDateTime
- getmicrotime
- GetTimeFormat
- GetDateFormat
При задании формата даты и времени используются следующие обозначения:
- 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() ); ?>
Юлия Маменко
|
||
В более поздней версии проблема с падежами решена. Пример использования:
| ||
Екатерина Богданова
|
в версии 11.5.7 полный месяц это не MMMM, а F
|
Роберт Басыров
|
||
По умолчанию дата выводится в формате 23 декабрь 2008 г., декабрь 23, 2008 г. ТО есть месяц - в именительном падеже. Если необходимо вывести дату в формате: 23 декабр(я) 2008 г., 15 ноябр(я) 2008 г., то:
| ||
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.