
Работа с датой – одна из базовых задач в PHP. Функция date() позволяет вывести текущую дату в нужном формате. Например, date(«d.m.Y») вернёт «05.05.2025». Формат задаётся с помощью символов: d – день месяца (01–31), m – номер месяца, Y – полный год.
Для динамического отображения даты и времени часто используется date(«H:i:s»), где H – часы в 24-часовом формате, i – минуты, s – секунды. Это удобно при логировании или отметках времени в пользовательском интерфейсе.
Если требуется указать дату не по текущему времени, а по заданному таймстампу, применяется date(«d.m.Y», $timestamp). Например: date(«d.m.Y», strtotime(«2023-08-01»)) выведет «01.08.2023».
Современный подход к работе с датами в PHP реализован через объект DateTime. Пример: (new DateTime())->format(«d.m.Y H:i»). Такой способ удобен для манипуляций с датой: добавления дней, вычисления разницы и преобразований в другие форматы.
Как вывести текущую дату и время с помощью функции date()

Функция date() в PHP позволяет получить текущую дату и время в заданном формате. Она использует внутренние настройки времени сервера и возвращает строку с данными, отформатированными по переданному шаблону.
Базовый пример:
<?php
echo date("Y-m-d H:i:s");
?>
Этот код выведет дату и время в формате год-месяц-день часы:минуты:секунды, например: 2025-05-05 14:23:10.
Полезные форматы, поддерживаемые функцией:
| Формат | Описание | Пример |
|---|---|---|
Y |
Полный год (4 цифры) | 2025 |
m |
Месяц с ведущим нулём | 05 |
d |
День месяца с ведущим нулём | 05 |
H |
Часы в 24-часовом формате | 14 |
i |
Минуты с ведущим нулём | 23 |
s |
Секунды с ведущим нулём | 10 |
Убедитесь, что установлена правильная временная зона:
<?php
date_default_timezone_set("Europe/Moscow");
echo date("d.m.Y H:i");
?>
Этот вызов гарантирует корректное отображение времени независимо от настроек сервера. Функция date() не возвращает актуальное время по UTC без явной установки временной зоны.
Использование функции time() для получения UNIX-времени

Функция time() в PHP возвращает текущее время в формате UNIX timestamp – количество секунд, прошедших с 1 января 1970 года 00:00:00 UTC. Это базовый способ получения текущего момента времени в числовом представлении.
Пример вызова функции:
<?php
echo time();
?>
Результат – целое число, например: 1714915200. Оно не зависит от часового пояса и всегда представляет время в UTC.
Для хранения и сравнения времени в базах данных рекомендуется использовать именно UNIX-время, так как оно упрощает математические операции над датами. Например, чтобы вычислить время через 24 часа:
<?php
$future = time() + 86400; // 86400 секунд в сутках
echo $future;
?>
Чтобы получить время в прошлом, например, час назад:
<?php
$past = time() - 3600; // 3600 секунд в часе
echo $past;
?>
Функция полезна при создании временных меток для кэширования, токенов, лимитов по времени. Она не принимает аргументов и работает быстрее, чем функции с обработкой форматов дат.
Для преобразования UNIX-времени в читаемый формат используйте date():
<?php
echo date('Y-m-d H:i:s', time());
?>
Использование time() особенно эффективно в скриптах, где требуется высокая производительность и точность временных расчётов.
Форматирование даты: день недели, месяц и год

Для отображения полного формата даты с днём недели, названием месяца и годом используйте функцию date() с соответствующими символами формата. Пример:
echo date("l, d F Y");
Этот код выведет, например: Monday, 05 May 2025. Буква l (латинская L) возвращает полное название дня недели, d – число с ведущим нулём, F – полное название месяца, Y – год из четырёх цифр.
setlocale(LC_TIME, 'ru_RU.UTF-8');
echo strftime("%A, %d %B %Y");
Результат: понедельник, 05 мая 2025. %A возвращает полное название дня недели, %d – день месяца, %B – полное название месяца, %Y – год.
Для корректного отображения русских символов необходимо, чтобы сервер поддерживал локаль ru_RU.UTF-8. Проверить доступные локали можно командой locale -a в терминале.
Если сервер не поддерживает нужную локаль, используйте массивы с переводами вручную. Пример с DateTime:
$months = [1=>'января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря'];
$days = ['Sunday'=>'воскресенье','Monday'=>'понедельник','Tuesday'=>'вторник','Wednesday'=>'среда','Thursday'=>'четверг','Friday'=>'пятница','Saturday'=>'суббота'];
$date = new DateTime();
echo $days[$date->format('l')] . ", " . $date->format('d') . " " . $months[(int)$date->format('m')] . " " . $date->format('Y');
Этот подход не зависит от локали и работает на любом сервере.
Для корректного отображения даты и времени с учётом часового пояса пользователя, необходимо использовать объект DateTime совместно с DateTimeZone. Получить часовой пояс можно через JavaScript и передать его на сервер.
Пример получения часового пояса пользователя на стороне клиента:
const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
fetch('/set-timezone.php', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ timezone })
});
На сервере сохранить значение в сессии:
// set-timezone.php
session_start();
$data = json_decode(file_get_contents('php://input'), true);
if (isset($data['timezone'])) {
$_SESSION['user_timezone'] = $data['timezone'];
}
session_start();
$timezone = isset($_SESSION['user_timezone']) ? $_SESSION['user_timezone'] : 'UTC';
$date = new DateTime('now', new DateTimeZone($timezone));
echo $date->format('Y-m-d H:i:s');
Всегда проверяйте валидность переданного значения через timezone_identifiers_list(), чтобы исключить подстановку недопустимых значений:
if (!in_array($timezone, timezone_identifiers_list())) {
$timezone = 'UTC';
}
Для отображения времени с учётом перехода на летнее время используйте именно идентификаторы часовых поясов (например, Europe/Moscow), а не смещения в формате +03:00.
Преобразование строки в дату с помощью функции strtotime()

Функция strtotime() преобразует текстовое представление даты и времени в метку времени Unix. Это позволяет работать с пользовательским вводом или внешними источниками данных, где дата представлена в виде строки.
Пример базового использования:
$timestamp = strtotime("2025-05-05");
Функция поддерживает множество форматов, включая относительные выражения:
echo date("Y-m-d H:i:s", strtotime("next Monday")); // Следующий понедельник
echo date("Y-m-d H:i:s", strtotime("+2 weeks")); // Через две недели
echo date("Y-m-d H:i:s", strtotime("last Friday")); // Прошлая пятница
echo date("Y-m-d", strtotime("2025-05-05 +3 days")); // 08.05.2025
При передаче недопустимой строки strtotime() возвращает false. Перед использованием результата важно проверить тип возвращаемого значения:
$dateString = "invalid date";
$timestamp = strtotime($dateString);
if ($timestamp !== false) {
echo date("Y-m-d", $timestamp);
} else {
echo "Некорректный формат даты";
}
Формат строки должен быть максимально точным. Например, "05/05/2025" может трактоваться по-разному в зависимости от конфигурации сервера (американский или европейский формат). Лучше использовать формат ISO 8601 – "2025-05-05".
Чтобы преобразовать пользовательский ввод, рекомендуется применять предварительную валидацию и нормализацию строки перед передачей в strtotime(). Это снижает риск ошибок и обеспечивает предсказуемый результат.
Разница между датами: вычисление количества дней
Пример кода для вычисления разницы:
diff($date2);
?>
В этом примере объект DateTime создается для обеих дат, после чего применяется метод diff(), который возвращает объект DateInterval. Свойство days объекта DateInterval содержит количество дней разницы между датами.
Если нужно учитывать только полные дни, то при подсчете разницы следует помнить, что метод diff() возвращает абсолютное значение разницы, то есть независимо от порядка дат. Если разница отрицательная, результат будет всегда положительным.
Для получения числа дней с учетом времени можно использовать метод getTimestamp(), который преобразует даты в Unix-временные метки. Разница между метками даст количество секунд, которое нужно разделить на количество секунд в одном дне (86400), чтобы получить точное количество дней:
getTimestamp() - $date1->getTimestamp();
$days = $diffInSeconds / 86400;
?>
Такой способ дает более точный результат, учитывая не только полные дни, но и разницу во времени.
Для работы с датами в разных часовых поясах также можно использовать объект DateTimeZone, который позволяет корректно учитывать смещения. Важно помнить, что временные зоны могут влиять на результаты, если разница между датами лежит на границе часовых поясов.
Для правильной работы с датами всегда учитывайте формат ввода и выходные значения, чтобы избежать ошибок при вычислениях.
Форматирование даты с использованием объекта DateTime
Пример создания объекта DateTime и его форматирования:
$datetime = new DateTime(); // Текущая дата и время
echo $datetime->format('Y-m-d H:i:s'); // Формат: 2025-05-05 14:30:00
Метод format() принимает строку, в которой указаны символы, определяющие формат. Наиболее распространенные символы:
Y– год (4 цифры)m– месяц (2 цифры)d– день месяца (2 цифры)H– час в 24-часовом формате (2 цифры)i– минуты (2 цифры)s– секунды (2 цифры)D– сокращенное название дня недели (например, Mon)M– сокращенное название месяца (например, Jan)
Пример форматирования даты с использованием различных комбинаций:
$datetime = new DateTime('2025-05-05 14:30:00');
echo $datetime->format('l, jS F Y'); // Понедельник, 5 мая 2025
setlocale(LC_TIME, 'ru_RU.UTF-8'); // Устанавливаем русскую локаль
$datetime = new DateTime('2025-05-05');
echo strftime('%A, %d %B %Y', $datetime->getTimestamp()); // Понедельник, 05 мая 2025
Метод format() можно комбинировать с различными функциями для изменения временной зоны, что также важно для работы с данными из разных регионов:
$datetime = new DateTime('2025-05-05 14:30:00', new DateTimeZone('Europe/Moscow'));
$datetime->setTimezone(new DateTimeZone('America/New_York'));
echo $datetime->format('Y-m-d H:i:s'); // 2025-05-05 06:30:00
Основной плюс использования DateTime для форматирования даты заключается в его гибкости и возможности работать с временными зонами и различными форматами даты и времени без использования множества дополнительных функций.
