W3docs

jdtofrench()

La función jdtofrench() de PHP convierte un Número de Día Juliano al Calendario Republicano Francés, gestionando automáticamente los años bisiestos.

Introducción

El Calendario Revolucionario Francés, también conocido como Calendario Republicano, fue creado durante la Revolución Francesa y se utilizó en Francia desde 1793 hasta 1805. Fue diseñado para reemplazar el calendario gregoriano y tenía la intención de ser más racional y científico. El calendario se basaba en la idea del tiempo decimal y consistía en 12 meses de 30 días cada uno, con 5 o 6 días adicionales al final del año para compensar los días sobrantes.

El Número de Día Juliano, por otro lado, es un sistema de conteo de días utilizado en astronomía. Se define como el número de días transcurridos desde el mediodía del 1 de enero de 4713 a.C. (calendario juliano). PHP incluye una función nativa jdtofrench() en la extensión Calendar para convertir el Número de Día Juliano al Calendario Revolucionario Francés, gestionando automáticamente las reglas de año bisiesto del calendario.

Fórmula de Conversión

Para convertir el Número de Día Juliano a una Fecha del Calendario Revolucionario Francés, se utiliza el siguiente algoritmo:

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

Donde:

  • J es el número de días transcurridos desde el inicio del Calendario Revolucionario Francés (22 de septiembre de 1792)
  • N es el número de día en el año actual (0-364)
  • Q es el número de mes (1-12 para los 12 meses, 13 para los días complementarios)
  • R es el número de día en el mes (1-30) o el día complementario (1-5/6)

Explicación de la Fórmula

La fórmula para convertir el Número de Día Juliano a una Fecha del Calendario Revolucionario Francés es sencilla una vez desglosada. Veamos cada paso.

Paso 1: Calcular J y N

Primero, calcule J restando 2375839 (el Número de Día Juliano del 22 de septiembre de 1792, la época del calendario) del Número de Día Juliano objetivo. Luego, encuentre N, el número de día dentro del ciclo actual de 365 días:

J = JDC - 2375839
N = J mod 365

Paso 2: Calcular Q y R

El calendario Revolucionario Francés divide el año en 12 meses de exactamente 30 días, seguidos de 5 o 6 días complementarios. Determinamos el mes (Q) y el día (R) usando estas reglas:

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

Si N es menor que 360, la fecha cae dentro de uno de los 12 meses. Dividimos N entre 30 para encontrar el índice del mes y sumamos 1. El resto da el índice del día, también ajustado sumando 1. Si N es 360 o mayor, la fecha cae en el período de días complementarios (Sans-culottides), al que se le asigna el número de mes 13.

Sintaxis

jdtofrench(int $julian_day): string
ParámetroDescripción
$julian_dayEl entero del Número de Día Juliano a convertir.

Valor de retorno: una cadena con el formato "mes/día/año", donde cada parte es un número (por ejemplo "6/12/1"). La función devuelve "0/0/0" para cualquier Número de Día Juliano fuera del rango válido del calendario (del 22 de septiembre de 1792 al 22 de septiembre de 1806).

Ejemplo

Convirtamos el Número de Día Juliano 2376000 a una Fecha del Calendario Revolucionario Francés.

Primero, calculamos J y N:

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

A continuación, calculamos Q y R:

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

Así que el resultado es el mes 6, día 12, año 1. Usando la tabla de meses a continuación, el mes 6 es Ventôse, lo que da 12 Ventôse, Año 1.

Implementación en PHP

PHP proporciona una función nativa jdtofrench() en la extensión Calendar, que gestiona la conversión y la lógica de los días complementarios automáticamente. Devuelve una cadena numérica "mes/día/año":

// Requires the Calendar extension
echo jdtofrench(2376000); // Outputs: 6/12/1

Los tres números corresponden exactamente a Q (mes), R (día) y el año que calculamos anteriormente. Para convertirlos en el nombre histórico del mes, divida la cadena y busque el mes en una tabla:

$frenchMonths = [
    1 => "Vendémiaire", 2 => "Brumaire",  3 => "Frimaire",
    4 => "Nivôse",      5 => "Pluviôse",  6 => "Ventôse",
    7 => "Germinal",    8 => "Floréal",   9 => "Prairial",
    10 => "Messidor",  11 => "Thermidor", 12 => "Fructidor",
    13 => "Sans-culottides",
];

list($month, $day, $year) = explode("/", jdtofrench(2376000));
echo "{$day} " . $frenchMonths[$month] . ", Year {$year}"; // 12 Ventôse, Year 1

Para fechas fuera del rango válido del calendario, la función devuelve "0/0/0", así que compruebe ese valor centinela en lugar de asumir una fecha real:

$jdc = 2376000;
$result = jdtofrench($jdc);
if ($result !== "0/0/0") {
    echo "French Republican date: {$result}";
} else {
    echo "Date is outside the French Revolutionary Calendar range.";
}

Funciones Relacionadas

La extensión Calendar proporciona conversores equivalentes que puede combinar con jdtofrench():

  • frenchtojd() — la inversa: fecha Republicana Francesa de vuelta a un Número de Día Juliano.
  • jdtogregorian() — Número de Día Juliano a una fecha gregoriana.
  • jdtojulian() — Número de Día Juliano a una fecha del calendario juliano.
  • jddayofweek() — el día de la semana para un Número de Día Juliano dado.

Conclusión

En conclusión, PHP proporciona una función nativa jdtofrench() en la extensión Calendar para convertir Números de Día Juliano a fechas del Calendario Revolucionario Francés. Al usar esta función nativa, puede traducir con precisión fechas históricas teniendo en cuenta automáticamente las reglas de año bisiesto del calendario y los días complementarios.

Práctica

Práctica
¿Qué hace la función jdtofrench() en PHP?
¿Qué hace la función jdtofrench() en PHP?
Was this page helpful?