Функция cot_date в Cotonti. (Подробно с примерами)
Функция cot_date является локализованной версией стандартной PHP функции date(), которая возвращает дату и время в заданном формате. Она учитывает настройки часового пояса пользователя и поддерживает локализацию на основе языка.
Описание функции cot_date
Функция cot_date является локализованной версией стандартной PHP функции date(), которая возвращает дату и время в заданном формате. Она учитывает настройки часового пояса пользователя и поддерживает локализацию на основе языка.
/**
* 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);
}
Параметры функции cot_date в Cotonti
$format (string): Формат даты и времени. Это строка, которая указывает, как должна быть представлена дата и время. Формат может быть как в стиле $Ldt (локализованные шаблоны), так и стандартный формат функции date().
$timestamp (int|null): Время в формате Unix timestamp. Если не передано значение (равно null), будет использовано текущее время, заданное в Cot::$sys['now'].
$usertimezone (bool): Если установлено значение true, то дата будет скорректирована с учетом часового пояса пользователя (см. Cot::$usr['timezone']). Если значение false, коррекция не будет применяться, и дата будет оставаться в стандарте UTC.
Тело функции cot_date в Cotonti
Установка временной метки:
Если $timestamp не передан, используется текущий момент времени из Cot::$sys['now'].
Корректировка времени для часового пояса пользователя:
Если параметр $usertimezone установлен в true, то временная метка $timestamp корректируется с учетом часового пояса пользователя (на основе значения Cot::$usr['timezone'], которое хранит смещение в часах от UTC).
Получение локализованного формата:
Если формат даты указан в виде элемента массива $Ldt, то используется его соответствующее значение для формата.
Если формат не задан в массиве $Ldt, то используется стандартный формат PHP (@date($format, $timestamp)).
Замена строк для локализации:
Функция ищет стандартные строки, такие как дни недели и месяцы (например, Monday, January и т.д.) в строке, полученной с помощью функции date(), и заменяет их на локализованные значения из массива Cot::$L для текущего языка.
Например, Monday будет заменен на Cot::$L['Monday'] (что соответствует переводу на выбранный язык).
Возврат результата:
Если текущий язык равен английскому ($lang == 'en'), функция возвращает строку времени без изменений.
В противном случае, она возвращает строку, где все дни недели и месяцы были заменены на локализованные значения.
Пример работы функции cot_date
Для текущей временной метки (например, 1647274740) и языка, отличного от английского, если формат $format задан как 'l, F j, Y' (например, для вывода "Monday, March 14, 2022"), функция:
Преобразует временную метку в локализованный день недели и месяц (например, "Понеділок, Березень 14, 2022").
Заменит английские названия дней и месяцев на их локализованные версии.
Рекомендации по использованию cot_date в контексте Cotonti
Локализация и международные сайты:
Использование функции cot_date важно для сайтов, поддерживающих несколько языков, так как она позволяет отображать дату и время в зависимости от языка пользователя.
Часовые пояса:
Если ваш сайт работает с пользователями по всему миру, важно учитывать, что функция поддерживает корректировку по часовому поясу пользователя. Это поможет обеспечить точность отображаемого времени для разных регионов.
Использование локализованных форматов:
Для того, чтобы время и даты на сайте всегда отображались в соответствии с локальными нормами, использование локализованных форматов через массив $Ldt и функцию cot_date становится необходимым.
Рекомендации по применению cot_date
Используйте функцию cot_date для вывода всех дат и времени на сайте, чтобы поддерживать локализацию и учитывать часовой пояс пользователя.
Можно задать локализованные форматы дат в массиве $Ldt для поддержки разных языков.
Применяйте эту функцию для вывода времени в сообщениях, комментариях, форумах, статьях, и других местах, где отображается дата.
Давайте подробно разберем каждое условие и действие внутри функции cot_date в фреймворке Cotonti.
1. Параметры функции cot_date:
$format: Строка формата, которая определяет, как будет отображаться дата и время (например, 'Y-m-d H:i:s').
$timestamp: Время в виде Unix timestamp (секунды, прошедшие с 1 января 1970 года). Если не передан, используется текущее время, определяемое переменной Cot::$sys['now'].
$usertimezone: Булевое значение, указывающее, нужно ли корректировать время с учетом часового пояса пользователя. По умолчанию установлено в true.
2. Если $timestamp не передан:
if (is_null($timestamp)) {
$timestamp = Cot::$sys['now'];
}
Проверяется, если временная метка ($timestamp) не передана в функцию (равна null), то используется текущее системное время, хранимое в Cot::$sys['now'].
3. Коррекция времени с учетом часового пояса пользователя:
if ($usertimezone) {
$timestamp += Cot::$usr['timezone'] * 3600;
}
Если параметр $usertimezone установлен в true, то время корректируется с учетом часового пояса пользователя.
Cot::$usr['timezone'] содержит смещение часового пояса пользователя в часах от UTC. Умножая его на 3600 (количество секунд в часе), мы получаем смещение в секундах, которое добавляется к временной метке.
4. Получение локализованного формата:
$datetime = (isset($Ldt[$format])) ? @date($Ldt[$format], $timestamp) : @date($format, $timestamp);
Функция проверяет, существует ли формат даты в массиве $Ldt (который содержит локализованные форматы даты для разных языков).
Если локализованный формат найден, используется его значение для форматирования даты. В противном случае используется стандартный формат PHP date($format, $timestamp).
5. Массивы для замены строк:
$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']
);
Эти массивы содержат стандартные английские наименования дней недели, месяцев и сокращений (например, Monday, January и т.д.) в массиве $search.
Массив $replace содержит локализованные версии этих строк, которые будут использоваться для замены. Локализованные строки хранятся в массиве Cot::$L.
6. Возврат строки с заменой на локализованные значения:
return ($lang == 'en') ? $datetime : str_replace($search, $replace, $datetime);
Если текущий язык ($lang) равен 'en' (английский), то возвращается строка времени без изменений ($datetime).
В противном случае (для всех других языков), выполняется замена стандартных строк в $datetime на локализованные с помощью функции str_replace(). Строки в массиве $search заменяются на соответствующие строки из массива $replace.
Резюме
Функция cot_date:
Принимает формат даты и временную метку.
Корректирует время с учетом часового пояса пользователя.
Проверяет, нужно ли использовать локализованный формат даты.
Заменяет стандартные английские наименования дней недели и месяцев на локализованные, если язык не английский.
Возвращает строку с датой и временем в нужном формате, локализованную в зависимости от текущего языка.
Это позволяет отображать даты и время на сайте в зависимости от языка и часового пояса пользователя, что особенно важно для многоязычных сайтов.
Примеры записи и вызова функции
$date_format = 'datetime_medium';
'CREATED' => cot_date($date_format, $page_data['page_date']),
'FORUMS_TOPICS_ROW_CREATIONDATE' => cot_date('datetime_short', $row['ft_creationdate']),
$row['ft_lastpostlink'] = cot_rc_link($row['ft_lastposturl'], Cot::$R['icon_unread'], 'rel="nofollow"').cot_date('datetime_short', $row['ft_updated']);
<td>{SUB_CREATED|cot_date('date_full',$this)}</td>
{PRD_ROW_DATE_STAMP|cot_date('j F Y', $this)}
{PAYOUT_ROW_CDATE|cot_date('d.m.Y H:i', $this)}
{FORUM_ROW_UPDATED_STAMP|cot_date('date_full', $this)}
{PHP.item.item_date|cot_date('d-m-Y', $this)}
Ресурсы по теме:
date — Форматирует метку времени эпохи Unix
Комментарии (0)
Автор контента
Оффлайн
Administrator
Последняя авторизация: 05.07.2026 18:32
- Страница размещена: 22.01.2025 15:49
- Последнее обновление: 22.01.2025 16:13