getdate()
Функция PHP getdate(): синтаксис, параметры, ассоциативный array и примеры работы с датами и временными метками.
Введение
Функция PHP getdate() разбивает дату на отдельные составляющие — год, месяц, день, час, название дня недели и другие — и возвращает их в виде ассоциативного array. По умолчанию она описывает текущее местное время, но вы можете передать любую Unix-временну́ю метку, чтобы описать другой момент.
Unix-временна́я метка — это целое число, представляющее количество секунд, прошедших с 1 января 1970 года, 00:00:00 UTC («эпоха Unix»). Такие метки возвращают функции time(), mktime() и strtotime(), а getdate() превращает их в удобочитаемый набор значений.
На этой странице рассматриваются синтаксис, все ключи возвращаемого array, примеры с возможностью запуска, а также сравнение getdate() с современным классом DateTime.
Синтаксис и параметры
Синтаксис getdate() выглядит следующим образом:
getdate(int $timestamp = time()): arrayЕдинственный необязательный параметр $timestamp — это Unix-временна́я метка для описания. Если он не передан, getdate() использует time() — текущий момент. Результат соответствует настроенному часовому поясу (см. date_default_timezone_set() или параметр date.timezone в php.ini), поэтому задавайте часовой пояс, если нужны согласованные результаты на разных серверах.
Возвращаемое значение
getdate() возвращает ассоциативный array, описывающий переданную временну́ю метку. Ниже приведены все ключи:
| Ключ | Значение |
|---|---|
| "seconds" | Секунды (0–59) |
| "minutes" | Минуты (0–59) |
| "hours" | Часы (0–23) |
| "mday" | День месяца (1–31) |
| "wday" | День недели (0–6, 0 = воскресенье) |
| "mon" | Месяц (1–12) |
| "year" | Год (например, 2023) |
| "yday" | День года (0–365) |
| "weekday" | Полное название дня недели (например, "Monday") |
| "month" | Полное название месяца (например, "January") |
| "0" | Unix-временна́я метка (секунды с 1 янв. 1970) |
| "zone" | Смещение часового пояса в секундах от GMT |
Примечание: ключ "0" (сырая временна́я метка) имеет тип integer; остальные ключи также содержат integer, кроме "weekday" и "month" — это string. Ключ "is_dst" был объявлен устаревшим в PHP 7.0 и удалён в PHP 8.0.
Использование и примеры
Форматирование текущей даты
Вызовите getdate(), сохраните результат и обращайтесь к нужным ключам:
Результат будет примерно таким: Today is Thursday, March 3, 2023.
Описание конкретной временно́й метки
Передайте Unix-временну́ю метку, чтобы описать момент, отличный от текущего. Здесь используется фиксированная метка для воспроизводимого вывода:
<?php
// 2021-12-25 00:00:00 UTC
$date = getdate(1640390400);
echo $date['weekday'] . ", " . $date['mday'] . " " . $date['month'] . " " . $date['year'] . PHP_EOL;
echo "Day " . $date['yday'] . " of the year, hour " . $date['hours'] . PHP_EOL;При использовании часового пояса UTC будет выведено:
Saturday, 25 December 2021
Day 358 of the year, hour 0Создание временно́й метки и последующее её разбиение
getdate() естественно сочетается с mktime(), которая строит временну́ю метку из отдельных компонентов:
<?php
// mktime(hour, minute, second, month, day, year)
$timestamp = mktime(9, 30, 0, 7, 4, 2024);
$parts = getdate($timestamp);
echo "{$parts['weekday']} at {$parts['hours']}:{$parts['minutes']}";Будет выведено Thursday at 9:30.
getdate() и класс DateTime
getdate() удобна для быстрых единоразовых обращений, но для арифметики с датами, сравнения или работы с часовыми поясами лучше использовать объектно-ориентированный класс DateTime:
DateTimeбезопасно выполняет арифметику с датами (->add(),->sub(),->diff()) через границы месяцев и лет.- Он содержит явный часовой пояс, что исключает неожиданности из-за глобального значения по умолчанию.
- Он форматирует вывод с помощью
date-formatвместо ручной конкатенации строк.
Используйте getdate(), когда нужно получить лишь несколько полей из временно́й метки; используйте DateTime, когда требуется манипулировать датами или сравнивать их.
Заключение
getdate() превращает Unix-временну́ю метку в именованный ассоциативный array, обеспечивая быстрый доступ к году, месяцу, дню недели или любому другому компоненту даты. Для отображения и простых запросов она идеальна; для арифметики с датами и логики с учётом часовых поясов предпочтительнее класс DateTime.