Вывод текущего года на PHP (копирайт в подвале)
Инструкция5 мин 68 Обновлено 22 июля Сложность: Базовая
TL;DR
- date('Y') возвращает текущий год из четырёх цифр – для копирайта хватает одной строки.
- Интервал «2022–2026» собирают тернарным оператором, сравнивая базовый год с (int) date('Y').
- Год создания хардкодят один раз, текущий – всегда из системного времени.
- date() зависит от часового пояса PHP: задайте его через php.ini или DateTimeZone('Europe/Moscow').
- Между годами ставят типографское тире «–», а не дефис.
Год в копирайте подвала («© 2026» или «© 2022–2026») – мелочь, из-за которой сайт выглядит заброшенным, если его забыли обновить 1 января. Решается это одной строкой на PHP: год всегда берётся из системного времени, а не вбивается руками.
Самый короткий вариант: date('Y')
Функция date('Y') возвращает текущий год из четырёх цифр. Для копирайта её достаточно:
<p>© <?= date('Y') ?> Название компании</p>
// © 2026 Название компанииИнтервал «год создания – текущий»
Часто нужно показать диапазон: «2022–2026», но пока год создания и текущий совпадают – только одно число, без тире. Это решает тернарный оператор: сравниваем базовый год с текущим и выбираем формат вывода.
<?php
$startYear = 2022;
$currentYear = (int) date('Y');
echo $startYear === $currentYear
? $startYear
: $startYear . '–' . $currentYear;
// в 2022-м выведет «2022», с 2023-го – «2022–2026»
?>
Обратите внимание на два момента. Во-первых, date('Y') возвращает строку – при сравнении её стоит привести к целому через (int), чтобы сравнение было строгим (===). Во-вторых, между годами лучше ставить типографское тире «–» (en dash), а не дефис «-» – это правильный знак диапазона.
Выносим в функцию, если год нужен в нескольких местах
Если копирайт повторяется (подвал, страница «О компании», письма), логику удобно завернуть в маленькую функцию – чтобы менять год основания в одном месте:
function copyrightYears(int $startYear): string
{
$current = (int) date('Y');
return $startYear === $current ? (string) $startYear : "$startYear–$current";
}
echo copyrightYears(2022); // 2022–2026Важно: часовой пояс сервера
Главный подвох – date() берёт год по часовому поясу PHP, а не по времени вашего города. Если пояс сервера настроен неверно, 31 декабря поздним вечером сайт может уже (или ещё) показать не тот год. Задать пояс явно можно двумя способами:
- Глобально в
php.ini:date.timezone = Europe/Moscow. - В коде – через
date_default_timezone_set('Europe/Moscow')либо объектно, что нагляднее и не трогает глобальное состояние:
$now = new DateTime('now', new DateTimeZone('Europe/Moscow'));
echo $now->format('Y'); // 2026Вариант для 1С-Битрикс
На сайте под Битриксом можно оставить чистый date('Y') – он работает в любом шаблоне. Если хочется единообразия с остальным кодом ядра, тот же год отдаёт и FormatDate('Y') без аргументов (текущее время в часовом поясе сайта). Функциональной разницы для копирайта нет, выбирайте по стилю проекта.
Подводные камни
- Кэш подвала. Если подвал закэширован (например, включён HTML-кэш или кэш шаблона), год «застынет» до сброса кэша. 1 января проверьте, что кэш обновился, – обычно достаточно сброса по расписанию.
- Не хардкодьте текущий год. Смысл приёма именно в том, чтобы не писать «2026» руками. Хардкод остаётся только у года основания.
- Тире, а не дефис. Для диапазона лет типографически верен знак «–» (en dash), а перечисление через дефис выглядит как ошибка.
Смежные приёмы работы с датами – в гайдах «Сменить формат даты в CMS Битрикс», «Формат Ydiff (например, 2 года)» и «Счётчик обратного отсчёта в списке новостей».
Частые вопросы
Как вывести текущий год на PHP?
Используйте date('Y') – функция возвращает текущий год из четырёх цифр по часовому поясу PHP. В шаблоне: .
Как показать интервал «год создания – текущий год»?
Сравните базовый год с текущим тернарным оператором: echo $start === (int) date('Y') ? $start : $start.'–'.date('Y'). Пока годы совпадают, выводится одно число, потом – диапазон.
Почему в новогоднюю ночь показывается неправильный год?
date() берёт время по часовому поясу PHP. Если пояс сервера отличается от вашего, год может смениться раньше или позже. Задайте пояс в php.ini (date.timezone) или через DateTimeZone('Europe/Moscow').
Чем date('Y') отличается от FormatDate('Y') в Битрикс?
Для вывода текущего года они равнозначны. date('Y') – чистый PHP по часовому поясу PHP, FormatDate('Y') – функция ядра Битрикса, работающая в часовом поясе сайта. Выбирайте по стилю проекта.
Почему год не меняется после Нового года?
Скорее всего подвал закэширован (HTML-кэш или кэш шаблона), и значение застыло. Дождитесь сброса кэша по расписанию или очистите его вручную.
Материалы по теме
Что почитать дальше по этой теме