Работа с датой и временем
Вся работа с датами через 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
При задании формата даты и времени используются следующие обозначения:
С версии 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 запросах
$DB->CharToDateFunction("10.01.2003 23:59:59")." "; $rs = $DB->Query($strSql, false, $err_mess.__LINE__); ?>
$DB->DateToCharFunction("DATE_CREATE")." DATE_CREATE FROM my_table "; $rs = $DB->Query($strSql, false, $err_mess.__LINE__); ?>
$DB->CurrentDateFunction() "; $rs = $DB->Query($strSql, false, $err_mess.__LINE__); ?>
$DB->CurrentTimeFunction()." WHERE "; $Query($strSql, false, "FILE: ".__FILE__."
LINE: ".__LINE__); ?>
DatetimeToTimestampFunction("DATE_CREATE")." DATE_CREATE FROM my_table "; $rs = $DB->Query($strSql, false, $err_mess.__LINE__); ?>
Конвертация форматов
$DB->DateFormatToPHP("DD.MM.YYYY HH:MI:SS"); // d.m.Y H:i:s ?>
$DB->FormatDate("31.12.2005", "DD.MM.YYYY", "YYYY-MM-DD"); // 2005-12-31 ?>
Дополнительные функции
$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 ?>
$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(array("DD" => -1, "MM" => 1), $stmp); // 1115454720 echo date("d.m.Y H:i:s", $stmp); // 06.05.2005 11:32:00 ?>
ParseDateTime("21.01.2004 23:44:15", "DD.MM.YYYY HH:MI:SS")) < echo "День: ".$arr["DD"]."
"; // День: 21 echo "Месяц: ".$arr["MM"]."
"; // Месяц: 1 echo "Год: ".$arr["YYYY"]."
"; // Год: 2004 echo "Часы: ".$arr["HH"]."
"; // Часы: 23 echo "Минуты: ".$arr["MI"]."
"; // Минуты: 44 echo "Секунды: ".$arr["SS"]."
"; // Секунды: 15 > else echo "Ошибка!"; ?>
DateFormatToPHP(CSite::GetDateFormat("SHORT")), time()); ?>
DateFormatToPHP( CSite::GetTimeFormat() ); ?>
Работа с датой и временем
Вся работа с датами через 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
При задании формата даты и времени используются следующие обозначения:
С версии 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 запросах
$DB->CharToDateFunction("10.01.2003 23:59:59")." "; $rs = $DB->Query($strSql, false, $err_mess.__LINE__); ?>
$DB->DateToCharFunction("DATE_CREATE")." DATE_CREATE FROM my_table "; $rs = $DB->Query($strSql, false, $err_mess.__LINE__); ?>
$DB->CurrentDateFunction() "; $rs = $DB->Query($strSql, false, $err_mess.__LINE__); ?>
$DB->CurrentTimeFunction()." WHERE "; $Query($strSql, false, "FILE: ".__FILE__."
LINE: ".__LINE__); ?>
DatetimeToTimestampFunction("DATE_CREATE")." DATE_CREATE FROM my_table "; $rs = $DB->Query($strSql, false, $err_mess.__LINE__); ?>
Конвертация форматов
$DB->DateFormatToPHP("DD.MM.YYYY HH:MI:SS"); // d.m.Y H:i:s ?>
$DB->FormatDate("31.12.2005", "DD.MM.YYYY", "YYYY-MM-DD"); // 2005-12-31 ?>
Дополнительные функции
$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 ?>
$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(array("DD" => -1, "MM" => 1), $stmp); // 1115454720 echo date("d.m.Y H:i:s", $stmp); // 06.05.2005 11:32:00 ?>
ParseDateTime("21.01.2004 23:44:15", "DD.MM.YYYY HH:MI:SS")) < echo "День: ".$arr["DD"]."
"; // День: 21 echo "Месяц: ".$arr["MM"]."
"; // Месяц: 1 echo "Год: ".$arr["YYYY"]."
"; // Год: 2004 echo "Часы: ".$arr["HH"]."
"; // Часы: 23 echo "Минуты: ".$arr["MI"]."
"; // Минуты: 44 echo "Секунды: ".$arr["SS"]."
"; // Секунды: 15 > else echo "Ошибка!"; ?>
DateFormatToPHP(CSite::GetDateFormat("SHORT")), time()); ?>
DateFormatToPHP( CSite::GetTimeFormat() ); ?>
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.
Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
В более поздней версии проблема с падежами решена. Пример использования:
$arParams["ACTIVE_DATE_FORMAT"]="j F Y"; // $arItem["PROPERTIES"]["DATE"]["VALUE"] - произвольное свойство типа дата CIBlockFormatProperties::DateFormat($arParams["ACTIVE_DATE_FORMAT"], MakeTimeStamp($arItem["PROPERTIES"]["DATE"]["VALUE"], CSite::GetDateFormat()));
По умолчанию дата выводится в формате 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]
DateTime
DateTime — Класс для работы с датами и временем. Большинство дат в ядре — объекты этого класса. Сам класс — расширение класса Date.
Обращается к пространству имён:
Объект класса \Datetime является практически аналогом встроенного в PHP класса \DateTime, но от него не наследуется. Объект класса \DateTime можно получить из объекта PHP-класса с помощью метода \Bitrix\Main\Type\DateTime::createFromPhp или из timestamp с помощью \Bitrix\Main\Type\DateTime::createFromTimestamp :
$objDateTime = DateTime::createFromPhp(new \DateTime('2000-01-01')); $objDateTime = DateTime::createFromTimestamp(1346506620);
// Текущее время: $objDateTime = new DateTime(); // Из строки в формате текущего сайта $objDateTime = new DateTime("25.12.2012 12:30:00"); // Из строки с указанием формата: $objDateTime = new DateTime("2007-05-14 12:10:00", "Y-m-d H:i:s");
Методы
Метод | Описание | С версии |
---|---|---|
createFromTimestamp | Метод создаёт объект DateTime из временной метки Unix. | 15.0.7 |
createFromPhp | Метод создаёт объект DateTime объекта \DateTime PHP. | |
createFromUserTime | Метод создаёт DateTime объект из локального времени пользователя с использованием глобальных настроек временной зоны и региональных настроек по умолчанию. | 14.0.18 |
getTimeZone | Метод возвращает объект временной зоны | |
setDefaultTimeZone | Метод устанавливает временную зону по умолчанию. | 14.0.18 |
setTimeZone | Метод устанавливает объект временной зоны. | 14.0.18 |
toString | Метод конвертирует дату в строку с использованием региональных настроек и настроек глобальных временных зон. | |
toUserTime | Метод изменяет время с серверного на время пользователя с использованием настроек глобальных временных зон. | 14.0.18 |
Примеры
Как из объекта получить представление в виде timestamp:
echo $objDateTime->getTimestamp();
Как из объекта получить представление в виде строки в формате текущего сайта:
Как из объекта получить представление в произвольном формате (используя \Bitrix\Main\Type\DateTime::format ):
echo $objDateTime->format("Y-m-d H:i:s");
Реализовать сложение и вычитание дат можно указывая смещение словами: years , months , days , weeks , hours , minutes , seconds и знаками +/- :
$objDateTime = new DateTime("01.01.2012 00:00:00"); // "2012-01-01 00:00:00" $objDateTime->add("1 day"); // "2012-01-02 00:00:00" $objDateTime->add("-1 day"); // "2011-12-31 00:00:00" $objDateTime->add("3 months - 5 days + 10 minutes"); // "2012-03-27 00:10:00"
Можно указывать смещение в формате DateInterval (но буква P в начале строки необязательна):
$objDateTime = new DateTime("01.01.2012 00:00:00"); // "2012-01-01 00:00:00" $objDateTime->add("7M5DT2M"); // "2012-08-06 00:02:00" $objDateTime->add("-2YT10M"); // "2009-12-31 23:50:00"
При указании смещения следует указывать периоды, от большей единицы до меньшей (например, года, месяцы, часы).
Время из формата текущего сайта:
$date = new \Bitrix\Main\Type\DateTime("16.08.2014 15:30:10"); $arFields = Array( 'DATE_START' => \Bitrix\Main\Type\DateTime::createFromUserTime("16.08.2014 15:30:10"); );
//для текущей даты $filter = array( " new \Bitrix\Main\Type\DateTime(), ">DATE_END" => new \Bitrix\Main\Type\DateTime(), );
Работа с датой и временем в Битрикс D7
Большинство дат в ORM D7 являются объектами класса Bitrix\Main\Type\DateTime. Для сокращения используем:
use Bitrix\Main\Type\DateTime;
Объект Datetime является практически аналогом встроенного в PHP класса \DateTime, но от него не наследуется. Объект Битрикс-класса можно получить из объекта PHP-класса с помощью метода createFromPhp или из timestamp с помощью createFromTimestamp:
$objDateTime = DateTime::createFromPhp(new \DateTime('2000-01-01')); $objDateTime = DateTime::createFromTimestamp(1346506620);
// Текущее время: $objDateTime = new DateTime(); // Из строки в формате текущего сайта $objDateTime = new DateTime("25.12.2012 12:30:00"); // Из строки с указанием формата: $objDateTime = new DateTime("2007-05-14 12:10:00", "Y-m-d H:i:s");
Из объекта можно получить представление в виде timestamp:
echo $objDateTime->getTimestamp();
в виде строки в формате текущего сайта:
в произвольном формате (фактически обёртка над DateTime::format):
echo $objDateTime->format("Y-m-d H:i:s");
Метод add реализует сложение и вычитание дат, можно указывать смещение словами years, months, days, weeks, hours, minutes, seconds и знаками +/-:
$objDateTime = new DateTime("01.01.2012 00:00:00"); // "2012-01-01 00:00:00" $objDateTime->add("1 day"); // "2012-01-01 00:00:00" => "2012-01-02 00:00:00" $objDateTime->add("-1 day"); // "2012-01-01 00:00:00" =>"2011-12-31 00:00:00" $objDateTime->add("3 months - 5 days + 10 minutes"); // "2012-01-01 00:00:00" =>"2012-03-27 00:10:00"
Метод add изменяет объект, здесь для наглядности приведены результаты вызова add с начального состояния $objDateTime.
Также в add можно указывать смещение в формате DateInterval (но буква P в начале строки необязательна):
$objDateTime = new DateTime("01.01.2012 00:00:00"); // "2012-01-01 00:00:00" $objDateTime->add("7M5DT2M"); // "2012-01-01 00:00:00" =>"2012-08-06 00:02:00" $objDateTime->add("-2YT10M"); // "2012-01-01 00:00:00" =>"2009-12-31 23:50:00"
При указании смещения следует указывать периоды, от большей единицы до меньшей (например, года, месяцы, часы).