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 |
1 | CAL_DOW_LONG | Полное название дня недели на английском (string) | "Thursday" |
2 | CAL_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: Thu2 марта 2023 года было четвергом, поэтому режим по умолчанию возвращает 4 (воскресенье — 0, значит четверг — четвёртый индекс), CAL_DOW_LONG возвращает "Thursday", а CAL_DOW_SHORT возвращает "Thu".
Распространённые ошибки
- По умолчанию отсчёт ведётся с воскресенья, а не с понедельника. Режим
0возвращает0для воскресенья, а не1для понедельника. Если вам нужна нумерация по ISO-8601 (понедельник = 1), добавьте собственное смещение или используйтеDateTime. - Расширение calendar должно быть включено. Функции
jddayofweek()иcal_to_jd()входят в расширение PHPcalendar. Оно поставляется с большинством сборок, но может быть отключено. - Неправильный порядок аргументов в
cal_to_jd(). Порядок такой:(calendar, month, day, year), а не(year, month, day). Перепутав месяц и день, вы получите неверный день недели без каких-либо сообщений об ошибке.
Заключение
jddayofweek() сопоставляет число юлианского дня с днём недели: либо в виде индекса, начиная с воскресенья (CAL_DOW_DAYNO), либо в виде полного названия (CAL_DOW_LONG), либо в виде сокращения (CAL_DOW_SHORT). В сочетании с cal_to_jd() функция позволяет точно определять дни недели для исторических, астрономических или межкалендарных расчётов с датами.