W3docs

jdtofrench()

The French Revolutionary Calendar, also known as the Republican Calendar, was created during the French Revolution and was used in France from 1793 to 1805. It

Введение

Французский революционный календарь, также известный как республиканский календарь, был создан во время Великой французской революции и использовался во Франции с 1793 по 1805 год. Он был разработан для замены григорианского календаря и должен был стать более рациональным и научным. Календарь основывался на идее десятичного времени и состоял из 12 месяцев по 30 дней каждый, с добавлением дополнительных 5 или 6 дней в конце года для компенсации оставшихся дней.

С другой стороны, юлианский день (Julian Day Count) — это система исчисления дней, используемая в астрономии. Он определяется как количество дней, прошедших с полудня 1 января 4713 года до н. э. (по юлианскому календарю). В PHP в составе расширения Calendar встроена функция jdtofrench() для преобразования юлианского дня в даты французского революционного календаря, которая автоматически учитывает правила високосных лет этого календаря.

Формула преобразования

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

J = JDC - 2375839
N = J mod 365
if N < 360 then
    Q = floor(N / 30) + 1
    R = (N mod 30) + 1
else
    Q = 13
    R = N - 359
end if

Где:

  • J — количество дней, прошедших с начала французского революционного календаря (22 сентября 1792 года)
  • N — номер дня в текущем году (0–364)
  • Q — номер месяца (1–12 для 12 месяцев, 13 для дополнительных дней)
  • R — номер дня в месяце (1–30) или дополнительный день (1–5/6)

Объяснение формулы

Формула преобразования юлианского дня в дату французского революционного календаря достаточно проста при пошаговом разборе. Рассмотрим каждый этап.

Шаг 1: Вычисление J и N

Сначала вычислите J, вычтя из целевого юлианского дня значение 2375839 (юлианский день 22 сентября 1792 года, начало отсчёта календаря). Затем найдите N — номер дня внутри текущего 365-дневного цикла:

J = JDC - 2375839
N = J mod 365

Шаг 2: Вычисление Q и R

Французский революционный календарь делит год на 12 месяцев по ровно 30 дней, за которыми следуют 5 или 6 дополнительных дней. Номер месяца (Q) и дня (R) определяются по следующим правилам:

if N < 360 then
    Q = floor(N / 30) + 1
    R = (N mod 30) + 1
else
    Q = 13
    R = N - 359
end if

Если N меньше 360, дата попадает в один из 12 месяцев. Мы делим N на 30, чтобы найти индекс месяца, и прибавляем 1. Остаток даёт индекс дня, который также корректируется прибавлением 1. Если N равно 360 или больше, дата попадает в период дополнительных дней (Санкюлотиды), которому присваивается номер месяца 13.

Пример

Преобразуем юлианский день 2376000 в дату французского революционного календаря.

Сначала вычислим J и N:

J = 2376000 - 2375839 = 161
N = 161 mod 365 = 161

Далее вычислим Q и R:

N < 360, so:
Q = floor(161 / 30) + 1 = 5 + 1 = 6
R = (161 mod 30) + 1 = 11 + 1 = 12

6-й месяц соответствует Брюмеру. Следовательно, юлианский день 2376000 соответствует 12 Брюмер года I (12 октября 1792 года).

Реализация в PHP

В PHP в составе расширения Calendar доступна встроенная функция jdtofrench(), которая автоматически выполняет преобразование и учитывает логику високосных лет:

// Requires the Calendar extension
echo jdtofrench(2376000); // Outputs: 12 Brumaire, Year 1

Для дат, предшествующих началу отсчёта календаря (22 сентября 1792 года), следует проверять входные данные, чтобы избежать неожиданных результатов:

$jdc = 2376000;
if ($jdc >= 2375839) {
    echo jdtofrench($jdc);
} else {
    echo "Date is before the French Revolutionary Calendar epoch.";
}

Заключение

В заключение, PHP предоставляет встроенную функцию jdtofrench() в расширении Calendar для преобразования юлианских дней в даты французского революционного календаря. Используя эту нативную функцию, вы сможете точно переводить исторические даты, автоматически учитывая правила високосных лет и дополнительные дни календаря.

Практика

Практика

Что делает функция jdtofrench() в PHP?