Getdate: примеры (PHP)

Руководство по работе с 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)
Класс DateTime

Объектно-ориентированный подход для работы с датой и временем. Предоставляет больше возможностей для манипуляций, сравнений и форматирования, особенно в сложных сценариях.

$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 позволяет вычислить примерный номер недели.

Пример php
$dateInfo = getdate();
$weekNumber = intval($dateInfo['yday'] / 7) + 1;
echo "С начала года прошло примерно $weekNumber недель.";
Проверка на выходной день
Пример php
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) ? 'Выходной' : 'Рабочий день';
Выходной
Формирование сложной строки даты на русском
Пример php
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;
Сравнение компонентов дат
Пример php
// Проверка, наступил ли уже день рождения в текущем году
$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 "День рождения в этом году еще будет.";
}
Создание кастомного объекта из результата getdate
Пример php
$rawDate = getdate();
// Преобразование в объект для точечного доступа
$dateObj = (object) $rawDate;
echo "Сейчас {$dateObj->hours} часов и {$dateObj->minutes} минут.";
// Добавление нового свойства
$dateObj->isMorning = $dateObj->hours < 12;
var_dump($dateObj->isMorning);

Аналоги в других языках

Python: datetime

Модуль datetime предоставляет объектно-ориентированный интерфейс. Аналогом получения структурированной информации является метод timetuple() или прямое обращение к атрибутам.

from datetime import datetime
now = datetime.now()
print(now.year, now.month, now.day, now.hour)
# Или как словарь через .timetuple()
JavaScript: Date

В 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: DATE_FORMAT и функции извлечения

В MySQL нет прямой функции, возвращающей массив. Используются функции извлечения частей даты (YEAR(), MONTH(), DAYNAME()) или форматирования DATE_FORMAT().

SELECT
  DAYNAME(NOW()) as weekday,
  DAY(NOW()) as mday,
  MONTHNAME(NOW()) as month;

PHP getdate function comments

En
Getdate Get date/time information