Функция cot_import_date в php-фреймворке Cotonti.
Её основное назначение — импортировать и обработать дату и время, полученные из различных источников (например, из POST-запроса, cookies или переменных). Она преобразует эти данные в метку времени Unix или возвращает их в виде массива с детализированными данными о дате и времени.
Пример использования:
в page.functions.php
$rpage['page_begin'] = (int) cot_import_date('rpagebegin');
в page.edit.php
'PAGEEDIT_FORM_BEGIN' => cot_selectbox_date($pag['page_begin'], 'long', 'rpagebegin').' '.Cot::$usr['timetext'],
Код функции
/**
* Imports date stamp
*
* @param string $name Variable name
* @param bool $usertimezone Use user timezone
* @param bool $returnarray Return Date Array
* @param string $source Source type: P (POST), C (COOKIE) or D (variable filtering)
* @return int|array{stamp: int, year: int, month: int, day: int, hour: int, minute: int}|null
*/
function cot_import_date($name, $usertimezone = true, $returnarray = false, $source = 'P')
{
if (function_exists('cot_import_date_custom')) {
return cot_import_date_custom($name, $usertimezone, $returnarray, $source);
}
$result = null;
/* === Hook === */
foreach (cot_getextplugins('import.date') as $pl) {
include $pl;
}
/* ===== */
if ($result !== null) {
return $result;
}
//$name = preg_match('#^(\w+)\[(.*?)\]$#', $name, $mt) ? $mt[1] : $name;
$date = cot_import($name, $source, 'ARR');
$timestamp = null;
/**
* Try to parse textual datetime string into a Unix timestamp
* @see https://www. .net/manual/en/datetime.formats.
*/
if (empty($date)) {
$date = cot_import($name, $source, 'TXT');
if (empty($date)) {
return null;
}
$timestamp = cot_date2stamp($date);
if ($timestamp === false) {
return null;
}
}
// Parse datetime array
if ($timestamp === null) {
$date['year'] = isset($date['year']) ? $date['year'] : 0;
$date['month'] = isset($date['month']) ? $date['month'] : 0;
$date['day'] = isset($date['day']) ? $date['day'] : 0;
$date['hour'] = isset($date['hour']) ? $date['hour'] : 0;
$date['minute'] = isset($date['minute']) ? $date['minute'] : 0;
$date['string'] = isset($date['string']) ? $date['string'] : '';
$date['format'] = isset($date['format']) ? $date['format'] : '';
$year = cot_import($date['year'], 'D', 'INT');
$month = cot_import($date['month'], 'D', 'INT');
$day = cot_import($date['day'], 'D', 'INT');
$hour = cot_import($date['hour'], 'D', 'INT');
$minute = cot_import($date['minute'], 'D', 'INT');
if (
count($date) > 0
&& is_null($year)
&& is_null($month)
&& is_null($day)
&& is_null($hour)
&& is_null($minute)
&& empty($date['string'])
) {
// Datetime field is present in form but it is set to zero date (empty)
return null;
}
$timestamp = 0;
if (($month && $day && $year) || ($day && $minute)) {
$timestamp = cot_mktime($hour, $minute, 0, $month, $day, $year);
} else {
$string = cot_import($date['string'], 'D', 'TXT');
$format = cot_import($date['format'], 'D', 'TXT');
if ($string) {
$format = !empty($format) ? $format : 'Y-m-d H:i';
$timestamp = cot_date2stamp($string, $format);
} else {
return null;
}
}
}
if ($usertimezone) {
$timestamp -= Cot::$usr['timezone'] * 3600;
}
if ($returnarray) {
$result = [];
$result['stamp'] = $timestamp;
$result['year'] = (int) date('Y', $timestamp);
$result['month'] = (int) date('m', $timestamp);
$result['day'] = (int) date('d', $timestamp);
$result['hour'] = (int) date('H', $timestamp);
$result['minute'] = (int) date('i', $timestamp);
return $result;
}
return $timestamp;
}
Рассмотрим код функции построчно:
Это описание функции. Она импортирует метку времени даты, и в зависимости от параметров, возвращает либо метку времени в формате int, либо массив с детализированной информацией о дате, либо null, если не удалось обработать дату.
function cot_import_date($name, $usertimezone = true, $returnarray = false, $source = 'P')
{
Это объявление функции cot_import_date с четырьмя параметрами:
$name: имя переменной, в которой содержится дата.
$usertimezone: флаг, указывающий, учитывать ли часовой пояс пользователя (по умолчанию — true).
$returnarray: флаг, указывающий, возвращать ли массив с деталями о дате (по умолчанию — false).
$source: источник данных (по умолчанию — 'P', т.е. из POST-запроса). Можно указать 'C' для cookies или 'D' для фильтрации переменных.
if (function_exists('cot_import_date_custom')) {
return cot_import_date_custom($name, $usertimezone, $returnarray, $source);
}
Если существует функция cot_import_date_custom, она вызывается и передаётся те же параметры. Это может быть расширение или кастомизация функции для работы с датами.
$result = null;
Инициализация переменной $result значением null. Это значение будет возвращено, если не удастся обработать дату.
/* === Hook === */
foreach (cot_getextplugins('import.date') as $pl) {
include $pl;
}
/* ===== */
Это интеграция с системой плагинов. Для хука 'import.date' загружаются и выполняются все плагины, которые зарегистрированы для этого хука. Если плагин изменяет или обрабатывает дату, он может это сделать в этом месте.
if ($result !== null) {
return $result;
}
Если после выполнения плагинов переменная $result не равна null, то результат возвращается сразу. Это может означать, что плагин обработал дату и вернул результат.
$date = cot_import($name, $source, 'ARR');
Функция cot_import извлекает данные о дате из указанного источника ($source) в виде массива ('ARR'). Если дата была передана в виде массива (например, через форму), то она будет доступна в переменной $date.
$timestamp = null;
Инициализация переменной для хранения метки времени Unix.
/**
* Try to parse textual datetime string into a Unix timestamp
* @see https://www. .net/manual/en/datetime.formats.
*/
if (empty($date)) {
$date = cot_import($name, $source, 'TXT');
if (empty($date)) {
return null;
}
$timestamp = cot_date2stamp($date);
if ($timestamp === false) {
return null;
}
}
Если переменная $date пуста (т.е. дата не передана в виде массива), то пытается извлечь дату как строку через cot_import в формате текста ('TXT'). Затем пытается преобразовать строку в метку времени Unix с помощью функции cot_date2stamp. Если это не удаётся, функция возвращает null.
// Parse datetime array
if ($timestamp === null) {
$date['year'] = isset($date['year']) ? $date['year'] : 0;
$date['month'] = isset($date['month']) ? $date['month'] : 0;
$date['day'] = isset($date['day']) ? $date['day'] : 0;
$date['hour'] = isset($date['hour']) ? $date['hour'] : 0;
$date['minute'] = isset($date['minute']) ? $date['minute'] : 0;
$date['string'] = isset($date['string']) ? $date['string'] : '';
$date['format'] = isset($date['format']) ? $date['format'] : '';
Если дата не была преобразована в метку времени, то функция пытается разобрать её как массив с годом, месяцем, днём, часом, минутой, строкой и форматом. Если какие-то параметры отсутствуют, устанавливаются значения по умолчанию (например, 0 для числовых значений и пустые строки для строковых).
$year = cot_import($date['year'], 'D', 'INT'); $month = cot_import($date['month'], 'D', 'INT'); $day = cot_import($date['day'], 'D', 'INT'); $hour = cot_import($date['hour'], 'D', 'INT'); $minute = cot_import($date['minute'], 'D', 'INT');
Каждое из полей массива $date импортируется с помощью функции cot_import, которая фильтрует и преобразует данные в соответствующий формат. Здесь используется тип фильтрации 'D' (для "даты") и 'INT' для числовых значений.
if (
count($date) > 0
&& is_null($year)
&& is_null($month)
&& is_null($day)
&& is_null($hour)
&& is_null($minute)
&& empty($date['string'])
) {
// Datetime field is present in form but it is set to zero date (empty)
return null;
}
Если в форме присутствует поле для даты, но оно установлено в нулевое значение (поля пусты или все числовые значения равны null), то возвращается null.
$timestamp = 0;
if (($month && $day && $year) || ($day && $minute)) {
$timestamp = cot_mktime($hour, $minute, 0, $month, $day, $year);
} else {
$string = cot_import($date['string'], 'D', 'TXT');
$format = cot_import($date['format'], 'D', 'TXT');
if ($string) {
$format = !empty($format) ? $format : 'Y-m-d H:i';
$timestamp = cot_date2stamp($string, $format);
} else {
return null;
}
}
Если все обязательные параметры для даты (год, месяц, день, час, минута) предоставлены, используется функция cot_mktime, чтобы вычислить метку времени Unix.
Если параметры не полные, проверяется, была ли передана строка с датой и её формат. Если строка есть, она конвертируется в метку времени с помощью функции cot_date2stamp.
if ($usertimezone) {
$timestamp -= Cot::$usr['timezone'] * 3600;
}
Если параметр $usertimezone равен true, то из метки времени вычитается смещение для часового пояса пользователя, чтобы привести время к правильному местному времени.
if ($returnarray) {
$result = [];
$result['stamp'] = $timestamp;
$result['year'] = (int) date('Y', $timestamp);
$result['month'] = (int) date('m', $timestamp);
$result['day'] = (int) date('d', $timestamp);
$result['hour'] = (int) date('H', $timestamp);
$result['minute'] = (int) date('i', $timestamp);
return $result;
}
Если параметр $returnarray установлен в true, то возвращается массив с полными данными о дате, включая метку времени, год, месяц, день, час и минуту.
return $timestamp;
}
Если $returnarray не задано, то возвращается просто метка времени Unix.
Итог:
Функция cot_import_date извлекает дату из различных источников (POST, COOKIE и т. д.), преобразует её в метку времени Unix, учитывает часовой пояс пользователя и, если необходимо, возвращает массив с подробной информацией о дате и времени. Это полезная функция для работы с датами и временем в фреймворке Cotonti.
Комментарии (0)
Автор контента
Оффлайн
Administrator
Последняя авторизация: 05.07.2026 18:32
- Страница размещена: 21.01.2025 08:08
- Последнее обновление: 21.01.2025 09:47