Getdate: примеры (PHP)
getdate(?int $timestamp = null): arrayОписание функции getdate
Функция getdate() возвращает ассоциативный массив, содержащий информацию о дате и времени, соответствующую переданной временной метке Unix. Если аргумент не указан, используется текущее время.
Функция принимает один необязательный аргумент:
- timestamp (int) — Временная метка Unix. Значение по умолчанию — результат работы функции time().
Массив со следующими ключами:
- seconds — секунды (0-59)
- minutes — минуты (0-59)
- hours — часы (0-23)
- mday — день месяца (1-31)
- wday — день недели в виде числа (0 - воскресенье, 6 - суббота)
- mon — месяц (1-12)
- year — год (4 цифры)
- yday — день года (0-365)
- weekday — полное название дня недели (например, "Friday")
- month — полное название месяца (например, "January")
- 0 — временная метка Unix, переданная в функцию
Основные примеры использования
$dateInfo = getdate();
print_r($dateInfo);// Вывод будет меняться. Пример:
Array
(
[seconds] => 15
[minutes] => 30
[hours] => 14
[mday] => 26
[wday] => 1
[mon] => 5
[year] => 2025
[yday] => 145
[weekday] => Monday
[month] => May
[0] => 1748262615
)// Фиксированная дата: 1 января 2023 года, 12:00:00
$timestamp = mktime(12, 0, 0, 1, 1, 2023);
$newYear = getdate($timestamp);
echo $newYear['weekday'] . ', ' . $newYear['mday'] . ' ' . $newYear['month'] . ' ' . $newYear['year'];Sunday, 1 January 2023$dateInfo = getdate();
$dayOfWeek = $dateInfo['wday']; // Число (0-6)
$dayName = $dateInfo['weekday']; // Название
echo "Сегодня $dayName, что соответствует номеру $dayOfWeek в неделе.";Похожие функции в PHP
Функция date() форматирует временную метку в строку по заданному формату. Используется, когда нужен строго определенный вывод, а не массив данных.
echo date('d.m.Y H:i:s');26.05.2025 14:30:15Возвращает массив, похожий на getdate(), но по умолчанию с числовыми индексами (как C-функция localtime). Второй параметр позволяет получить ассоциативный массив.
$timeArray = localtime(time(), true);
print_r($timeArray['tm_mon']+1); // Месяц (0-11, поэтому +1)Объектно-ориентированный подход для работы с датой и временем. Предоставляет больше возможностей для манипуляций, сравнений и форматирования, особенно в сложных сценариях.
$date = new DateTime();
echo $date->format('Y-m-d');Распространенные ошибки
Функция ожидает целочисленную временную метку Unix. Передача строки может привести к неожиданным результатам или предупреждениям.
// Неправильно: строка
$date = getdate('2025-05-26');
print_r($date['year']);// Результат зависит от версии PHP и настроек.
// Может вернуть информацию для эпохи Unix (1970) или вызвать предупреждение.При работе с датами до 1970 года или после 2038 года на 32-битных системах могут возникать проблемы с переполнением.
// На 32-битной системе дата до 1970 года
$timestamp = -86400; // 31 декабря 1969
$date = getdate($timestamp);
print_r($date['year']);// Может вернуть 1969, 1970 или некорректное значение.Массив, возвращаемый функцией, является значением. Его изменение не влияет на системное время.
$dateInfo = getdate();
$dateInfo['year'] = 3000; // Изменяется только локальная копия
echo date('Y'); // Выведет текущий год, а не 3000Изменения в новых версиях PHP
Функция getdate() остается стабильной и практически не менялась в последних основных версиях PHP. Ее поведение и сигнатура одинаковы в PHP 7.x и PHP 8.x.
Основное отличие связано с общей эволюцией обработки дат в PHP:
- Начиная с PHP 5.1, при неверном timestamp функция возвращала информацию для текущего времени и/ила генерировала предупреждение.
- В PHP 8.0 и выше, в рамках общего ужесточения типизации, передача аргумента нецелочисленного типа может приводить к фатальной ошибке TypeError, если строка не может быть преобразована в число неявно. Рекомендуется явно приводить аргумент к целому числу с помощью (int) или использовать функции типа strtotime() для конвертации строк.
Расширенные примеры
Ключ yday позволяет вычислить примерный номер недели.
$dateInfo = getdate();
$weekNumber = intval($dateInfo['yday'] / 7) + 1;
echo "С начала года прошло примерно $weekNumber недель.";function isWeekend($timestamp = null) {
$date = getdate($timestamp ?? time());
return $date['wday'] == 0 || $date['wday'] == 6;
}
// Проверка для конкретной даты
$testTime = mktime(0,0,0,12,31,2023); // 31 декабря 2023, воскресенье
echo isWeekend($testTime) ? 'Выходной' : 'Рабочий день';Выходнойsetlocale(LC_TIME, 'ru_RU.UTF-8'); // Установка локали
$dateInfo = getdate();
// Использование strftime для локализованных названий (в PHP 8.1+ устарело)
// Альтернатива с IntlDateFormatter предпочтительнее.
$monthNames = [
1 => 'января', 2 => 'февраля', 3 => 'марта',
4 => 'апреля', 5 => 'мая', 6 => 'июня',
7 => 'июля', 8 => 'августа', 9 => 'сентября',
10 => 'октября', 11 => 'ноября', 12 => 'декабря'
];
$dayNames = [
0 => 'воскресенье', 1 => 'понедельник', 2 => 'вторник',
3 => 'среда', 4 => 'четверг', 5 => 'пятница', 6 => 'суббота'
];
$m = $dateInfo['mon'];
$w = $dateInfo['wday'];
$formattedDate = $dateInfo['mday'] . ' ' . $monthNames[$m] . ' ' . $dateInfo['year'] . ', ' . $dayNames[$w];
echo $formattedDate;// Проверка, наступил ли уже день рождения в текущем году
$birthdayTimestamp = strtotime('15-August-1990');
$birthdayThisYear = mktime(0,0,0, date('n', $birthdayTimestamp), date('j', $birthdayTimestamp), date('Y'));
$nowInfo = getdate();
$bdInfo = getdate($birthdayThisYear);
if ($nowInfo['yday'] > $bdInfo['yday']) {
echo "День рождения в этом году уже прошел.";
} elseif ($nowInfo['yday'] == $bdInfo['yday']) {
echo "Сегодня день рождения!";
} else {
echo "День рождения в этом году еще будет.";
}$rawDate = getdate();
// Преобразование в объект для точечного доступа
$dateObj = (object) $rawDate;
echo "Сейчас {$dateObj->hours} часов и {$dateObj->minutes} минут.";
// Добавление нового свойства
$dateObj->isMorning = $dateObj->hours < 12;
var_dump($dateObj->isMorning);Аналоги в других языках
Модуль datetime предоставляет объектно-ориентированный интерфейс. Аналогом получения структурированной информации является метод timetuple() или прямое обращение к атрибутам.
from datetime import datetime
now = datetime.now()
print(now.year, now.month, now.day, now.hour)
# Или как словарь через .timetuple()В JavaScript объект Date имеет методы для получения отдельных компонентов (getFullYear(), getMonth() и т.д.). Для получения полного объекта, аналогичного getdate, нужно собрать его вручную.
const now = new Date();
const dateInfo = {
year: now.getFullYear(),
month: now.getMonth() + 1, // 0-11
date: now.getDate(),
hours: now.getHours()
};
console.log(dateInfo);В MySQL нет прямой функции, возвращающей массив. Используются функции извлечения частей даты (YEAR(), MONTH(), DAYNAME()) или форматирования DATE_FORMAT().
SELECT
DAYNAME(NOW()) as weekday,
DAY(NOW()) as mday,
MONTHNAME(NOW()) as month;