Введение: почему вопрос «Как получить текущий год в PHP?» так популярен?
Казалось бы, что может быть проще? Взять и вывести текущий год. Но на Stack Overflow этот вопрос набрал сотни тысяч просмотров. Почему? Потому что за кажущейся простотой скрываются десятки нюансов: от различий между серверным временем и часовым поясом пользователя до правильного форматирования для разных локалей.
В этой статье мы разберем как получить текущий год в PHP всеми возможными способами, научимся избегать типичных ошибок и поймем, какой метод выбрать для вашей конкретной задачи. Независимо от того, пишете ли вы копирайт в футере сайта или сложную систему учета времени — этот материал будет полезен.
Поехали!
Способ №1: Классическая функция date()
Самый популярный и простой способ получить текущий год в PHP — использовать функцию date(). Она возвращает отформатированную строку с текущей датой и временем сервера.
<?php
// Получаем текущий год (4 цифры)
$year = date('Y');
echo "Сейчас $year год"; // Выведет: Сейчас 2026 год
?>
Что здесь происходит? Символ Y — это формат, который означает «год в 4-значном формате». Если вам нужен год в виде двух последних цифр (24, 25, 26), используйте y:
<?php
echo date('y'); // 26
?>
Почему date('Y') — это хорошо?
- Простота: одна строка кода — и готово.
- Гибкость: можно комбинировать с другими форматами:
date('Y-m-d')— дата,date('Y-m-d H:i:s')— дата со временем. - Скорость: функция работает очень быстро, не требует создания объектов.
Когда стоит быть осторожным?
Функция date() использует часовой пояс, установленный в настройках PHP (директива date.timezone в php.ini). Если на сервере стоит неправильный часовой пояс, получение текущего года в PHP может дать неверный результат в новогоднюю ночь.
Решение: всегда устанавливайте часовой пояс в начале скрипта:
<?php
date_default_timezone_set('Europe/Moscow');
echo date('Y'); // Теперь точно 2026
?>
Способ №2: Объектно-ориентированный подход — класс DateTime
Если вы пишете современный код на PHP (версии 5.2+), лучше использовать класс DateTime. Это более мощный и гибкий инструмент для работы с датами.
<?php
$now = new DateTime();
$year = $now->format('Y');
echo "Текущий год: $year";
?>
Преимущества DateTime:
- Объектная модель: можно легко манипулировать датами (добавлять дни, месяцы, сравнивать).
- Четкое управление часовым поясом: передайте временную зону в конструктор.
- Интернационализация: легко локализовать даты.
Пример с часовым поясом:
<?php
$timezone = new DateTimeZone('Europe/London');
$now = new DateTime('now', $timezone);
echo $now->format('Y'); // Год по Гринвичу
?>
Способ №3: Использование функции strftime() (устаревший, но всё ещё жив)
Функция strftime() когда-то была стандартом для локализованного вывода дат. С PHP 8.1 она объявлена устаревшей, но на старых проектах вы можете её встретить.
<?php
setlocale(LC_TIME, 'ru_RU.UTF-8');
echo strftime('%Y'); // 2026
?>
Важно: не используйте strftime() в новых проектах. Вместо этого применяйте IntlDateFormatter для локализации.
Способ №4: Как получить год из произвольной даты?
Часто нужно не просто получить текущий год в PHP, а извлечь его из уже существующей даты (например, из базы данных).
Строковый подход (если дата в формате Y-m-d):
<?php
$dateString = '2025-12-31';
$year = substr($dateString, 0, 4);
echo $year; // 2025
?>
Объектный подход (рекомендуемый):
<?php
$date = new DateTime('2025-12-31');
echo $date->format('Y'); // 2025
?>
Используйте DateTime — он корректно обработает любой строковый формат даты, который понимает PHP (ISO 8601, американский, европейский и т.д.).
Частые ошибки при получении года в PHP
Даже такая простая операция, как получение текущего года в PHP, таит в себе подводные камни. Вот топ-3 ошибки новичков:
Ошибка 1: Путаница между Y и y
Используете y вместо Y? Получите 26 вместо 2026. В большинстве случаев нужен 4-значный формат.
Ошибка 2: Игнорирование часового пояса
Сервер может быть настроен на UTC, а вы находитесь во Владивостоке. В момент, когда у вас уже наступил новый год, сервер всё ещё показывает прошлый год. Всегда устанавливайте часовой пояс!
Ошибка 3: Использование date() без проверки локали
Функция date() возвращает английские названия. Если вам нужно вывести «2026 год» по-русски, придется использовать IntlDateFormatter или ручную подстановку.
Какой способ выбрать для вашего проекта?
Давайте подведем итоги и составим шпаргалку:
| Ситуация | Рекомендуемый метод | Пример |
|---|---|---|
| Просто вывести год в футере сайта | date('Y') |
echo date('Y'); |
| Нужно работать с датами (сравнивать, изменять) | DateTime |
$dt = new DateTime(); echo $dt->format('Y'); |
| Дата приходит из базы данных | DateTime |
<
БлогиРекомендаций по книгамЧитайте также |