Даты приходят в разных форматах.
Возьмем инфоблок и компонент news.detail
Заметил такую дурацкую вещь, что если начало активности поставить без времени,
то она ["ACTIVE_FROM"] будет выводиться в компоненте как Date - 02.10.2025
НО если указать время, то уже выводится как DateTime - 02.10.2025 01:05:00
Да есть формат в настройках компонента ["DISPLAY_ACTIVE_FROM"]=> "02.10.2025"
Но иногда приходится выводить дату в разных форматах, например, для соблюдения доступности
И допустим, если создавать вот так:
То мы получим ошибку, если формат будет приходить то без времени. В таком случае надо проверять, что это Date или DateTime.
Есть у нас поле ["ACTIVE_FROM_X"] которое вроде всегда выводит время и даты через дефис
Но блин, почему ["TIMESTAMP_X"] тогда тут через точки. Где логика?))
["TIMESTAMP_X"] => "31.10.2025 14:13:14" --- формат сайта
И если получить через getList, то будет примерно тоже самое
А если укажем дату активности без времени, то вот
Т.е. я могу опереться на дату ["ACTIVE_FROM_X"] которая через дефис, единственная среди всех.
Либо использовать другие поля, но проверять на наличие отсутствие времени.
Логичнее всего, в данной ситуации просто вернуть объект DateTime, а я бы уже сам как-то вывел в нужный формат, хотя там наверно тоже что-то будет интересное.
Возьмем инфоблок и компонент news.detail
Заметил такую дурацкую вещь, что если начало активности поставить без времени,
то она ["ACTIVE_FROM"] будет выводиться в компоненте как Date - 02.10.2025
НО если указать время, то уже выводится как DateTime - 02.10.2025 01:05:00
Да есть формат в настройках компонента ["DISPLAY_ACTIVE_FROM"]=> "02.10.2025"
Но иногда приходится выводить дату в разных форматах, например, для соблюдения доступности
<time class="news-date" datetime="2025-05-11">11.05.2025</time> |
И допустим, если создавать вот так:
$dateObj = DateTime::createFromFormat( \Bitrix\Main\Type\DateTime::getFormat(), // формат сайта $arItem['fields']["DATE_ACTIVE_FROM"] // дата сформирована из формата сайта ); |
То мы получим ошибку, если формат будет приходить то без времени. В таком случае надо проверять, что это Date или DateTime.
Есть у нас поле ["ACTIVE_FROM_X"] которое вроде всегда выводит время и даты через дефис
["ACTIVE_FROM_X"] => "2025-10-02 00:00:00" |
Но блин, почему ["TIMESTAMP_X"] тогда тут через точки. Где логика?))
["TIMESTAMP_X"] => "31.10.2025 14:13:14" --- формат сайта
И если получить через getList, то будет примерно тоже самое
["TIMESTAMP_X"] => "31.10.2025 14:29:54" ["ACTIVE_FROM_X"] => "2025-10-02 01:05:00" // ПОЧЕМУ ТОЛЬКО ТУТ ДЕФИС ["ACTIVE_FROM"] => "02.10.2025 01:05:00" ["DATE_ACTIVE_FROM"] => "02.10.2025 01:05:00" ["DATE_CREATE"] => "31.10.2025 13:32:09" ["~DATE_CREATE"] => "31.10.2025 13:32:09" |
А если укажем дату активности без времени, то вот
["ACTIVE_FROM_X"]=> "2025-09-01 00:00:00" ["ACTIVE_FROM"]=> "01.09.2025" // НЕТУ ВРЕМЕНИ ["DATE_ACTIVE_FROM"]=> "01.09.2025" // ТОЖЕ |
Т.е. я могу опереться на дату ["ACTIVE_FROM_X"] которая через дефис, единственная среди всех.
Либо использовать другие поля, но проверять на наличие отсутствие времени.
Логичнее всего, в данной ситуации просто вернуть объект DateTime, а я бы уже сам как-то вывел в нужный формат, хотя там наверно тоже что-то будет интересное.