W3docs

jddayofweek()

Функция jddayofweek() в PHP возвращает день недели для заданного числа юлианского дня. Узнайте о параметре mode и примерах использования.

Функция jddayofweek() в PHP возвращает день недели для заданного числа юлианского дня. На этой странице объясняется, что такое число юлианского дня, что именно возвращает каждый mode (та часть, в которой чаще всего ошибаются), а также приводится рабочий проверенный пример.

Что такое число юлианского дня?

Число юлианского дня (JDN) — это единственное целое число, подсчитывающее количество дней, прошедших с полудня 1 января 4713 года до н. э. (эпоха юлианского периода). Поскольку это просто один непрерывный счётчик без месяцев, лет и правил календаря, он служит общей «валютой» для преобразования дат между разными календарными системами и выполнения арифметических операций с датами в астрономии и истории.

Число юлианского дня крайне редко вводят вручную. Вместо этого оно получается из календарной даты с помощью конвертера, например cal_to_jd() (а обратное преобразование выполняется функцией jdtogregorian()). Затем jddayofweek() сообщает, на какой день недели приходится этот JDN.

«Число юлианского дня», используемое здесь, не имеет отношения к юлианскому календарю (календарю эпохи Цезаря, заменённому григорианским в 1582 году). Названия похожи, но это разные понятия.

Синтаксис

jddayofweek(int $julian_day, int $mode = CAL_DOW_DAYNO): int|string
  • $julian_day — число юлианского дня для проверки (целое число, например результат cal_to_jd()).
  • $mode — необязательный параметр. Определяет, что возвращает функция. По умолчанию равен CAL_DOW_DAYNO (0).

Параметр mode

Параметр mode — та часть функции, которая вызывает наибольшее замешательство. Существует три режима, и по умолчанию возвращается число, начиная с 0 для воскресенья — а не диапазон 1–7, начинающийся с понедельника.

РежимКонстантаВозвращаетПример для четверга
0 (по умолчанию)CAL_DOW_DAYNOЦелое число от 0 до 6, где 0 = воскресенье и 6 = суббота4
1CAL_DOW_LONGПолное название дня недели на английском (string)"Thursday"
2CAL_DOW_SHORTТрёхбуквенное сокращение (string)"Thu"

Используйте именованные константы (CAL_DOW_LONG и т. д.) вместо числовых значений — так код легче читается.

Как использовать jddayofweek() в PHP

Сначала преобразуйте целевую дату в число юлианского дня с помощью cal_to_jd(), которая принимает тип календаря и отдельные целые числа для месяца, дня и года (именно в таком порядке). Затем передайте результат в jddayofweek() с нужным режимом.

Функция jddayofweek() в PHP

<?php
// Convert the Gregorian date 2023-03-02 to a Julian day number.
// Argument order is: calendar, month, day, year.
$julianDay = cal_to_jd(CAL_GREGORIAN, 3, 2, 2023);

// Mode 0 (default): integer, 0 = Sunday ... 6 = Saturday
echo "Day number: " . jddayofweek($julianDay, CAL_DOW_DAYNO) . "\n";

// Mode 1: full weekday name
echo "Full name:  " . jddayofweek($julianDay, CAL_DOW_LONG) . "\n";

// Mode 2: abbreviated weekday name
echo "Short name: " . jddayofweek($julianDay, CAL_DOW_SHORT) . "\n";
?>

Вывод программы:

Day number: 4
Full name:  Thursday
Short name: Thu

2 марта 2023 года было четвергом, поэтому режим по умолчанию возвращает 4 (воскресенье — 0, значит четверг — четвёртый индекс), CAL_DOW_LONG возвращает "Thursday", а CAL_DOW_SHORT возвращает "Thu".

Распространённые ошибки

  • По умолчанию отсчёт ведётся с воскресенья, а не с понедельника. Режим 0 возвращает 0 для воскресенья, а не 1 для понедельника. Если вам нужна нумерация по ISO-8601 (понедельник = 1), добавьте собственное смещение или используйте DateTime.
  • Расширение calendar должно быть включено. Функции jddayofweek() и cal_to_jd() входят в расширение PHP calendar. Оно поставляется с большинством сборок, но может быть отключено.
  • Неправильный порядок аргументов в cal_to_jd(). Порядок такой: (calendar, month, day, year), а не (year, month, day). Перепутав месяц и день, вы получите неверный день недели без каких-либо сообщений об ошибке.

Заключение

jddayofweek() сопоставляет число юлианского дня с днём недели: либо в виде индекса, начиная с воскресенья (CAL_DOW_DAYNO), либо в виде полного названия (CAL_DOW_LONG), либо в виде сокращения (CAL_DOW_SHORT). В сочетании с cal_to_jd() функция позволяет точно определять дни недели для исторических, астрономических или межкалендарных расчётов с датами.

Практика

Практика
Что делает функция jddayofweek() в PHP?
Что делает функция jddayofweek() в PHP?
Was this page helpful?