Функция 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

 

6 минут чтения Administrator

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

Administrator

Оффлайн

Administrator

Последняя авторизация: 05.07.2026 18:32

  • Страница размещена: 22.01.2025 15:49
  • Последнее обновление: 22.01.2025 16:13

Похожие страницы

Функция cot_date в Cotonti
1 Функция cot_date в фреймворке Cotonti используется для форматирования метки времени Unix в строку даты и времени с