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

Полное руководство по использованию idate в PHP 8
Раздел: Дата и время
idate(string $format, ?int $timestamp = null): int|false
Описание и синтаксис функции idate

Функция idate() возвращает целочисленное значение части даты/времени согласно заданному формату. В отличие от date(), функция возвращает только одно значение как integer, что может быть полезно для вычислений.

Функция обычно используется для получения числового представления отдельных компонентов времени, таких как год, месяц, день недели, без необходимости парсить строку.

Синтаксис
idate(string $format, ?int $timestamp = null): int|false
Аргументы
  • $format (string) - Один символ форматирования. Список допустимых символов:
    • B - Swatch Internet Time (от 0 до 999)
    • d - День месяца (1-31)
    • h - Час в 12-часовом формате (1-12)
    • H - Час в 24-часовом формате (0-23)
    • i - Минуты (0-59)
    • I (заглавная i) - Признак летнего времени (1 если летнее время, 0 если нет)
    • L - Признак високосного года (1 если високосный, 0 если нет)
    • m - Номер месяца (1-12)
    • N - Порядковый номер дня недели (1-понедельник, 7-воскресенье)
    • o - Номер недели в году согласно ISO-8601
    • s - Секунды (0-59)
    • t - Количество дней в месяце (28-31)
    • U - Количество секунд с начала Unix эпохи
    • w - Порядковый номер дня недели (0-воскресенье, 6-суббота)
    • W - Номер недели в году (по ISO-8601: недели начинаются с понедельника)
    • y - Номер года, две цифры (например, 99 или 03)
    • Y - Номер года, четыре цифры
    • z - Порядковый номер дня в году (0-365)
    • Z - Смещение часового пояса в секундах
  • $timestamp (?int) - Необязательный параметр. Unix timestamp. Если не указан или равен null, используется текущее время.
Базовые примеры использования

Примеры показывают различные форматы вызова функции idate с разными параметрами.

Получение текущего дня месяца
echo idate('d');
19
Получение номера месяца с указанием timestamp
$timestamp = strtotime('2023-12-25');
echo idate('m', $timestamp);
12
Проверка на високосный год
echo idate('L', strtotime('2024-01-01'));
1
Получение дня недели (0-воскресенье)
echo idate('w', strtotime('2023-10-01'));
0
Получение дня недели по ISO (1-понедельник)
echo idate('N', strtotime('2023-10-01'));
7
Похожие функции в PHP

В PHP существуют несколько функций для работы с датой и временем, каждая имеет свои особенности.

Функция date()

Возвращает форматированную строку даты. Может возвращать несколько компонентов одновременно, в отличие от idate, которая возвращает только одно целое число. Используется чаще, когда нужен читабельный вывод.

Функция getdate()

Возвращает ассоциативный массив с подробной информацией о дате/времени. Удобно, когда нужно получить сразу несколько значений.

Функция strftime()

Форматирует дату/время согласно локали. В PHP 8.1 считается устаревшей, вместо нее рекомендуется использовать IntlDateFormatter.

Когда что использовать
  • idate() - для получения одного числового значения даты, когда требуется целочисленный тип для вычислений.
  • date() - для форматированного строкового представления даты.
  • getdate() - для получения всех компонентов даты одновременно в виде массива.
  • IntlDateFormatter - для локализованного форматирования.
Типичные ошибки
Неправильный формат

Передача строки длиннее одного символа приводит к неожиданным результатам, так как idate использует только первый символ.

// Неправильно: передается строка 'dm'
echo idate('dm');
19  // Был использован только первый символ 'd'
Некорректный timestamp

До PHP 8.0 функция возвращала false при ошибке. В PHP 8.0 и выше выбрасывается исключение TypeError при неверном типе аргумента.

// До PHP 8.0
var_dump(idate('d', 'invalid'));
bool(false)
// PHP 8.0+
// idate('d', 'invalid'); // Вызовет TypeError
Ожидание строки от date()

Путаница между idate и date может привести к ошибкам, когда ожидается строка, а возвращается число.

Изменения в версиях PHP
PHP 8.0.0

Функция больше не возвращает false при возникновении ошибки. Вместо этого выбрасывается исключение TypeError при передаче аргументов неверного типа. Параметр $timestamp теперь допускает значение null.

Ранние версии

В PHP 5.1.0 и выше функция учитывает установленный часовой пояс. В версиях ранее 5.1.0 для корректной работы с часовыми поясами нужно было использовать date_default_timezone_set().

Расширенные примеры
Вычисление возраста в днях
Пример php
$birthday = strtotime('1990-05-15');
$today = time();
$daysSinceBirth = idate('z', $today) - idate('z', $birthday) + 
                 (idate('Y', $today) - idate('Y', $birthday)) * 365;
echo "Количество дней с дня рождения: $daysSinceBirth";
Количество дней с дня рождения: 12205
Определение номера недели в году для планирования
Пример php
$date = strtotime('2023-12-31');
$weekNumber = idate('W', $date);
echo "31 декабря 2023 находится в неделе номер: $weekNumber";
31 декабря 2023 находится в неделе номер: 52
Проверка рабочего дня
Пример php
function isWorkDay($timestamp) {
    $dayOfWeek = idate('N', $timestamp);
    return ($dayOfWeek >= 1 && $dayOfWeek <= 5);
}
$testDate = strtotime('2023-10-21');
echo isWorkDay($testDate) ? 'Рабочий день' : 'Выходной';
Выходной
Работа с часовыми поясами
Пример php
date_default_timezone_set('Europe/Moscow');
$timestamp = time();
echo "Часовой пояс: " . idate('Z') / 3600 . " часа";
Часовой пояс: 3 часа
Форматирование Swatch Internet Time
Пример php
$beat = idate('B');
echo "Текущее время в интернет-формате: @$beat";
Текущее время в интернет-формате: @500
Определение времени года по номеру месяца
Пример php
function getSeason($timestamp) {
    $month = idate('m', $timestamp);
    if ($month >= 3 && $month <= 5) return 'Весна';
    if ($month >= 6 && $month <= 8) return 'Лето';
    if ($month >= 9 && $month <= 11) return 'Осень';
    return 'Зима';
}
echo getSeason(strtotime('2023-08-15'));
Лето
Аналоги в других языках

Idate в Python

Модуль datetime предоставляет аналогичные возможности через атрибуты объектов datetime.

from datetime import datetime
now = datetime.now()
day = now.day  # Аналог idate('d')
month = now.month  # Аналог idate('m')
print(f"Day: {day}, Month: {month}")
Day: 19, Month: 10

Idate в Javascript

Объект Date имеет методы для получения отдельных компонентов.

const now = new Date();
const day = now.getDate();  // idate('d')
const month = now.getMonth() + 1;  // idate('m'), но в JS месяцы с 0
console.log(`Day: ${day}, Month: ${month}`);
Day: 19, Month: 10

Idate в MySQL

Функции извлечения частей даты из столбцов или значений.

SELECT DAY('2023-10-19') as day,  -- Аналог idate('d')
       MONTH('2023-10-19') as month;  -- Аналог idate('m')
day: 19, month: 10
Основные отличия

В Python и JavaScript работа с датами обычно объектно-ориентированная, в PHP и MySQL - через функции. Формат возвращаемых значений также отличается: в PHP idate всегда возвращает integer, в то время как аналоги в других языках могут возвращать числа как примитивы или в рамках объекта.

PHP idate function comments

En
Idate Format a local time/date as integer