В файле /bitrix/modules/main/tools/calendar.php используется код определения формата даты
Код |
---|
global $DB;
$iH=IntVal(FmtDate($date,"H"));
$iI=IntVal(FmtDate($date,"I"));
$iS=IntVal(FmtDate($date,"S"));
if($iH+$iI+$iS>0)
$dtformat = "FULL";
else
$dtformat = "SHORT"; |
Однако, для $date = "26.05.2018", вопреки ожиданиям, устанавливается $dtformat = "FULL";
Проанализировав исходники, удалось найти причину.
Строка
$iH = IntVal(FmtDate($date, "H")); , как оказалось, возвращает
12...
Копнув глубже, выяснил, что в функции
FmtDate методу
Код |
---|
$DB->FormatDate($str_date, CSite::GetDateFormat("FULL", $site, $bSearchInSitesOnly), $format); |
на вход подаются следующие данные
Код |
---|
$DB->FormatDate("26.05.2018", "DD.MM.YYYY HH:MI:SS", "H"); |
А в методе CDatabase::FormatDate, после приведения формата "H" в "h"
Код |
---|
$toPhpFormat = Main\Type\Date::convertFormatToPhp("H"); // теперь $toPhpFormat = "h"; |
код
Код |
---|
$time->format($toPhpFormat);
|
возвращает
12, т.к. внутри метода исполняется нативный метод DateTime::format("h");
Т.о., для нашей даты имеем
Код |
---|
$date = new DateTime('2018-05-26');
echo $date->format('h'); // 12
|
В результате проверка
$iH + $iI + $iS > 0 возвращает
true.
В то же время, если бы использовался формат
"H", то
Код |
---|
$date = new DateTime('2018-05-26');
echo $date->format('H'); // 00 |
и результат был бы корректным.