W3docs

jdtojulian()

Функция PHP jdtojulian() преобразует номер юлианского дня в дату юлианского календаря. Примеры использования и обратная функция juliantojd().

Функция PHP jdtojulian()

Функция jdtojulian() преобразует номер юлианского дня в дату юлианского календаря, возвращая строку в формате month/day/year.

Важно не путать два значения слова «юлианский»:

  • Номер юлианского дня (JDC) — непрерывный счёт дней, начиная с полудня по всемирному времени 1 января 4713 года до н.э. Это просто число (например, 2459459), которое не имеет отношения к какому-либо конкретному календарю. Оно широко используется в астрономии, поскольку упрощает арифметику дат.
  • Юлианский календарь — календарь, введённый Юлием Цезарем в 45 году до н.э. и применявшийся в Европе вплоть до его постепенной замены григорианским календарём начиная с 1582 года. На сегодняшний день два календаря расходятся на 13 дней.

jdtojulian() принимает номер юлианского дня и возвращает соответствующую дату в юлианском календаре. Её аналог, jdtogregorian(), делает то же самое, но возвращает дату в григорианском календаре.

Синтаксис

jdtojulian(int $julian_day): string

Функция принимает один параметр — номер юлианского дня в виде целого числа — и возвращает соответствующую дату юлианского календаря в виде строки "month/day/year". Если передать 0 (недопустимый номер юлианского дня), функция вернёт "0/0/0".

Преобразование номера юлианского дня в дату юлианского календаря

<?php

$jdc = 2459459;
$julianDate = jdtojulian($jdc);

echo $julianDate; // Outputs: 8/19/2021

Возвращаемое значение является строкой, поэтому при необходимости её можно разобрать на отдельные части:

<?php

[$month, $day, $year] = explode('/', jdtojulian(2459459));

echo "Year: $year, Month: $month, Day: $day";
// Outputs: Year: 2021, Month: 8, Day: 19

Почему даты юлианского и григорианского календарей различаются

Один и тот же номер юлианского дня соответствует разным датам в разных календарях. Для 2459459:

<?php

echo jdtojulian(2459459);    // Outputs: 8/19/2021  (Julian calendar)
echo "\n";
echo jdtogregorian(2459459); // Outputs: 9/1/2021   (Gregorian calendar)

Разрыв в 13 дней между 8/19 и 9/1 — это именно текущее расхождение между юлианским и григорианским календарями: обе строки описывают один и тот же момент времени.

Преобразование даты юлианского календаря обратно в номер юлианского дня

Чтобы выполнить обратное преобразование — из даты юлианского календаря в номер юлианского дня — используйте juliantojd(). Функция принимает месяц, день и год и возвращает целое число:

<?php

$jdc = juliantojd(8, 19, 2021);

echo $jdc; // Outputs: 2459459

Поскольку эти две функции являются обратными друг другу, полный цикл преобразований возвращает исходную дату:

<?php

echo jdtojulian(juliantojd(8, 19, 2021)); // Outputs: 8/19/2021

Когда это может понадобиться?

Юлианский календарь редко нужен для работы с обычными датами в приложениях — для этого предпочтительнее использовать API PHP DateTime и date(), которые работают с григорианским календарём. jdtojulian() полезна, когда вы:

  • Работаете с историческими записями, датированными до григорианской реформы 1582 года (или в странах, принявших её значительно позже).
  • Обращаетесь к астрономическим или генеалогическим данным, в которых даты хранятся в виде номеров юлианского дня.
  • Конвертируете между календарными системами, используя номер юлианского дня как нейтральный посредник — например, gregoriantojd() → сохранить целое число → jdtojulian().

Примечание: для работы этих функций должно быть включено расширение calendar. Оно поставляется в комплекте с PHP и по умолчанию компилируется в большинстве сборок.

Заключение

Функция jdtojulian() преобразует номер юлианского дня в строку с датой юлианского календаря, тогда как juliantojd() выполняет обратное преобразование. Они являются аналогами григорианской пары jdtogregorian() и gregoriantojd(), поэтому один и тот же номер дня даёт разные метки в разных календарях. Подробности см. в официальной документации jdtojulian() и juliantojd().

Практика

Практика
Какова роль функции jdtojulian() в PHP?
Какова роль функции jdtojulian() в PHP?
Was this page helpful?