Вступление: почему вопрос про «текущий год» так популярен?
Казалось бы, что может быть проще, чем спросить у PHP: «Эй, какой сейчас год?» — и получить ответ. Но не тут-то было! Вопрос «How do I use PHP to get the current year?» собрал на Stack Overflow десятки тысяч просмотров. Почему?
Во-первых, это одна из первых задач, с которой сталкивается новичок: вывести в подвале сайта «© 2024», сделать динамический список лет в форме регистрации или просто проверить возраст пользователя. Во-вторых, PHP предлагает несколько разных подходов, и каждый имеет свои нюансы. В-третьих (и это самое коварное), начинающие часто путают date('y') и date('Y') — и получают не 2024, а 24. А потом удивляются, почему сайт «живёт» в прошлом веке.
В этой статье мы разберём все популярные способы получить текущий год в PHP, от самых очевидных до более продвинутых. Вы узнаете, как избежать типичных ошибок, какой способ выбрать для своего проекта и как работать с годом в разных часовых поясах. Поехали!
1. Самый простой способ: функция date()
Король всех PHP-функций для работы с датами — это date(). Она принимает формат и опционально временную метку. Если метку не указать, используется текущее время сервера.
Как получить 4-значный год (2024, 2025…)
<?php
echo date('Y'); // Выведет: 2024
?>
Символ Y (заглавная) — это полное представление года, 4 цифры. Именно его нужно использовать в 99% случаев.
Как получить 2-значный год (24, 25…)
<?php
echo date('y'); // Выведет: 24
?>
Символ y (строчная) — это год из двух цифр. Используйте его, только если вы пишете игрушечную программу или работаете с legacy-кодом (который, скорее всего, уже сломан из-за Y2K-подобных проблем).
Реальный пример: копирайт в футере
<footer>
<p>© 2010–<?php echo date('Y'); ?> Мой супер-сайт</p>
</footer>
Этот код автоматически обновит год в подвале — вам не придётся править его каждый январь. Круто, правда?
2. Объектно-ориентированный подход: класс DateTime
Если вы пишете современный PHP (7.x, 8.x), лучше использовать класс DateTime. Он более гибкий, удобный для манипуляций и легче читается.
Получаем год через DateTime
<?php
$now = new DateTime();
echo $now->format('Y'); // 2024
?>
Метод format() работает так же, как и date(), но на объекте. Преимущество — вы легко можете изменить дату, добавить дни, месяцы, а потом снова отформатировать.
Расширенный пример: год из конкретной даты
<?php
$date = new DateTime('2023-03-15');
echo $date->format('Y'); // 2023
?>
Это полезно, когда вы работаете с базой данных и храните даты в виде строк.
3. Старый добрый strftime() (но с оговоркой)
Функция strftime() — ещё один способ получить год. Она хороша тем, что учитывает локаль (язык и региональные настройки). Например, в русской локали она может вывести название месяца на русском.
Пример с strftime
<?php
setlocale(LC_TIME, 'ru_RU.utf8');
echo strftime('%Y'); // 2024
?>
Но есть важный нюанс: начиная с PHP 8.1 функция strftime() помечена как устаревшая (deprecated). Её всё ещё можно использовать, но в будущих версиях её могут удалить. Если пишете новый код — лучше используйте DateTime.
4. Переменная $_SERVER['REQUEST_TIME']
Иногда нужно получить год «на лету», без создания объектов. Для этого можно использовать суперглобальный массив $_SERVER.
<?php
echo date('Y', $_SERVER['REQUEST_TIME']); // 2024
?>
REQUEST_TIME содержит временную метку начала запроса к серверу. Это быстрее, чем time(), но разница в микросекундах обычно не критична.
5. Функция time() и работа с метками
Никто не запрещает сделать так:
<?php
$timestamp = time();
echo date('Y', $timestamp); // 2024
?>
По сути, это то же самое, что просто date('Y'), но вы явно передаёте метку. Может пригодиться, если вы сохранили метку в переменную и потом используете её несколько раз.
Сравнение способов: что выбрать?
Давайте сведём всё в таблицу (мысленно, конечно). В реальной статье мы можем оформить её как список:
- date('Y') — самый простой и быстрый. Используйте, если вам нужен «голый» год без дополнительных манипуляций.
- DateTime::format('Y') — лучший выбор для ООП-кода. Легко расширяется, понятен другим разработчикам.
- strftime('%Y') — только если вы застряли на старой версии PHP и вам нужна локаль.
- $_SERVER['REQUEST_TIME'] — микро-оптимизация для хардкорных перфекционистов.
- time() + date() — избыточно, но работает.
Частые ошибки и как их избежать
Давайте разберём три самых популярных грабля, на которые наступают новички.
Ошибка 1: Путаница между 'Y' и 'y'
Самая распространённая. Вы пишете echo date('y'); и получаете 24 вместо 2024. Потом клиент говорит: «У вас в подвале сайта 1924 год выглядит подозрительно». Помните: Y — большое, год — полный.
Ошибка 2: Игнорирование часового пояса
PHP использует часовой пояс сервера. Если сервер стоит в Нью-Йорке, а ваш пользователь во Владивостоке, то в момент, когда у пользователя уже наступил 2025 год, сервер всё ещё покажет 2024. Решение — установить нужный часовой пояс в начале скрипта: