Функция cot_date в Cotonti
Функция cot_date в фреймворке Cotonti используется для форматирования метки времени Unix в строку даты и времени с учетом часового пояса пользователя и локализации.
/**
* Localized version of PHP date()
*
* @see https://php.net/manual/en/function.date.php
* @param string $format Date/time format as defined in $Ldt or according to PHP date() format
* @param int $timestamp Unix timestamp
* @param bool $usertimezone Offset the date with current user's timezone
* @return string
*/
function cot_date($format, $timestamp = null, $usertimezone = true)
{
global $lang, $Ldt;
if (is_null($timestamp)) {
$timestamp = Cot::$sys['now'];
}
$timestamp = (int) $timestamp;
if ($usertimezone) {
$timestamp += Cot::$usr['timezone'] * 3600;
}
$datetime = (isset($Ldt[$format])) ? @date($Ldt[$format], $timestamp) : @date($format, $timestamp);
$search = array(
'Monday', 'Tuesday', 'Wednesday', 'Thursday',
'Friday', 'Saturday', 'Sunday',
'Mon', 'Tue', 'Wed', 'Thu',
'Fri', 'Sat', 'Sun',
'January', 'February', 'March',
'April', 'May', 'June',
'July', 'August', 'September',
'October', 'November', 'December',
'Jan', 'Feb', 'Mar',
'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep',
'Oct', 'Nov', 'Dec'
);
$replace = array(
Cot::$L['Monday'], Cot::$L['Tuesday'], Cot::$L['Wednesday'], Cot::$L['Thursday'],
Cot::$L['Friday'], Cot::$L['Saturday'], Cot::$L['Sunday'],
Cot::$L['Monday_s'], Cot::$L['Tuesday_s'], Cot::$L['Wednesday_s'], Cot::$L['Thursday_s'],
Cot::$L['Friday_s'], Cot::$L['Saturday_s'], Cot::$L['Sunday_s'],
Cot::$L['January'], Cot::$L['February'], Cot::$L['March'],
Cot::$L['April'], Cot::$L['May'], Cot::$L['June'],
Cot::$L['July'], Cot::$L['August'], Cot::$L['September'],
Cot::$L['October'], Cot::$L['November'], Cot::$L['December'],
Cot::$L['January_s'], Cot::$L['February_s'], Cot::$L['March_s'],
Cot::$L['April_s'], Cot::$L['May_s'], Cot::$L['June_s'],
Cot::$L['July_s'], Cot::$L['August_s'], Cot::$L['September_s'],
Cot::$L['October_s'], Cot::$L['November_s'], Cot::$L['December_s']
);
return ($lang == 'en') ? $datetime : str_replace($search, $replace, $datetime);
}
Рассмотрим код построчно:
function cot_date($format, $timestamp = null, $usertimezone = true)
{
Это объявление функции cot_date, которая принимает три параметра:
$format: строка формата для функции date(), как в стандартной функции PHP. Определяет, как должна быть отформатирована дата и время.
$timestamp: метка времени Unix, которую нужно отформатировать. Если параметр не передан, будет использовано текущее время.
$usertimezone: флаг, который указывает, следует ли учитывать часовой пояс пользователя. По умолчанию — true.
global $lang, $Ldt;
Это глобальные переменные, используемые в функции:
$lang: язык, используемый в системе.
$Ldt: массив с возможными форматами дат.
if (is_null($timestamp)) {
$timestamp = Cot::$sys['now'];
}
Если параметр $timestamp равен null, используется текущее время, которое хранится в глобальной переменной Cot::$sys['now'].
$timestamp = (int) $timestamp;
Приводит переменную $timestamp к типу int, что гарантирует, что она будет числовым значением (метка времени Unix).
if ($usertimezone) {
$timestamp += Cot::$usr['timezone'] * 3600;
}
Если флаг $usertimezone установлен в true, то из метки времени корректируется часовой пояс пользователя. Смещение часового пояса пользователя хранится в Cot::$usr['timezone'], и оно умножается на 3600 (количество секунд в часе), чтобы учесть разницу во времени.
$datetime = (isset($Ldt[$format])) ? @date($Ldt[$format], $timestamp) : @date($format, $timestamp);
В этой строке происходит форматирование даты и времени с помощью функции date():
Если для формата даты существует запись в массиве $Ldt, используется его значение в качестве формата для date().
Если записи в $Ldt для данного формата нет, используется формат $format, переданный в функцию.
$search = array(
'Monday', 'Tuesday', 'Wednesday', 'Thursday',
'Friday', 'Saturday', 'Sunday',
'Mon', 'Tue', 'Wed', 'Thu',
'Fri', 'Sat', 'Sun',
'January', 'February', 'March',
'April', 'May', 'June',
'July', 'August', 'September',
'October', 'November', 'December',
'Jan', 'Feb', 'Mar',
'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep',
'Oct', 'Nov', 'Dec'
);
Здесь создается массив $search, который содержит все возможные названия дней недели и месяцев на английском языке. Эти строки будут заменены на соответствующие локализованные значения.
$replace = array(
Cot::$L['Monday'], Cot::$L['Tuesday'], Cot::$L['Wednesday'], Cot::$L['Thursday'],
Cot::$L['Friday'], Cot::$L['Saturday'], Cot::$L['Sunday'],
Cot::$L['Monday_s'], Cot::$L['Tuesday_s'], Cot::$L['Wednesday_s'], Cot::$L['Thursday_s'],
Cot::$L['Friday_s'], Cot::$L['Saturday_s'], Cot::$L['Sunday_s'],
Cot::$L['January'], Cot::$L['February'], Cot::$L['March'],
Cot::$L['April'], Cot::$L['May'], Cot::$L['June'],
Cot::$L['July'], Cot::$L['August'], Cot::$L['September'],
Cot::$L['October'], Cot::$L['November'], Cot::$L['December'],
Cot::$L['January_s'], Cot::$L['February_s'], Cot::$L['March_s'],
Cot::$L['April_s'], Cot::$L['May_s'], Cot::$L['June_s'],
Cot::$L['July_s'], Cot::$L['August_s'], Cot::$L['September_s'],
Cot::$L['October_s'], Cot::$L['November_s'], Cot::$L['December_s']
);
Здесь создается массив $replace, который содержит локализованные значения для дней недели и месяцев. Эти значения берутся из глобального массива Cot::$L, который хранит переводы для различных языков.
return ($lang == 'en') ? $datetime : str_replace($search, $replace, $datetime);
В конце функция возвращает строку с отформатированной датой:
Если текущий язык системы — английский ($lang == 'en'), то возвращается строка $datetime без изменений.
Если язык не английский, используется функция str_replace(), чтобы заменить английские названия дней недели и месяцев на локализованные из массива $replace.
Итог:
Функция cot_date форматирует метку времени в строку, учитывая:
Формат даты, который передается в параметре $format.
Часовой пояс пользователя, если задан флаг $usertimezone.
Локализацию, то есть замену английских названий дней недели и месяцев на переведенные на текущий язык названия.
Если используется английский язык, дата выводится в стандартном формате без локализации. В других случаях английские названия дней и месяцев заменяются на локализованные версии, что позволяет адаптировать вывод для разных языков в системе Cotonti.
Comments (0)
Content author
Offline
Administrator
Last logged: 2026-07-05 18:32
- Page published: 2025-01-21 08:38
- Last update: 2025-01-21 08:38