подробный разбор того, как устроен тип datetime в системе extrafields Cotonti.
Статья получилась объёмной, но для начала – краткие тезисы, чтобы обсудить концепцию.
Что важно знать о datetime в экстраполях
Хранение – значение всегда хранится как
int(Unix timestamp). Пустая дата =0.Параметры поля – в
field_paramsпередаются три значения через запятую:min,max,formatminиmax– границы года (по умолчанию 2000 и 2030).format– строка формата для вывода (PHP или ключ из$Ldt).
Форма редактирования – генерируется через
cot_selectbox_date()с учётом часового пояса пользователя. Поддерживаются относительные даты (+86400).Импорт – выполняется через
cot_import_date(), которая приводит время к UTC перед сохранением. Если год выходит заmin/max, он корректируется.Вывод –
cot_build_extrafields_data()использует параметрformat; если его нет, возвращает сырой timestamp.Часовые пояса – на вводе время переводится в UTC, на выводе – в локальную зону текущего пользователя.
Шаблоны – для проверки наличия даты обязательно используйте тег
_VALUE(например,{USERS_DETAILS_XTRA_..._VALUE}), чтобы не показывать пустые блоки и избежать "01.01.1970".Особенности –
0считается пустым, обязательные поля вызывают ошибку при0. Хукиform.dateиimport.dateпозволяют переопределять логику.
Что требует обсуждения?
Считаете ли вы такой подход к хранению дат (Unix timestamp) удобным?
Не возникает ли проблем с часовыми поясами в ваших проектах?
Какие форматы вывода чаще всего используете – предпочитаете
datetime_mediumили кастомные строки?Как быть с 2038 годом на 32-битных системах – планируете переход на 64-битные timestamp?
Возможно, у вас есть свои наработки по улучшению работы с датами в экстраполях?
Полная версия статьи с примерами кода, детальным разбором каждой функции и схемой работы – по ссылке:
🔗 https://abuyfile.com/ru/cotonti/reading/extrafields-datetime-cotonti
Приглашаю к обсуждению – делитесь опытом, задавайте вопросы, предлагайте улучшения! Вместе сделаем документацию по Cotonti полезнее.