Cómo convertir una fecha judía a fecha juliana en PHP
Aprende a usar jewishtojd() en PHP para convertir fechas del calendario judío a un número de día juliano y luego a gregoriano.
La función jewishtojd() de PHP convierte una fecha del calendario judío (hebreo) en un número de día juliano — un entero único que identifica un día de forma inequívoca. Dado que los números de día juliano son neutrales respecto al calendario, actúan como un "pivote" común que permite convertir entre sistemas de calendarios: convierte una fecha judía a un día juliano y luego ese número a una fecha gregoriana (o cualquier otro calendario compatible). Esta página explica cómo funciona la función, sus parámetros y casos límite, y muestra ejemplos verificados y ejecutables.
Las funciones de calendario requieren la extensión PHP
calendar. Se incluye en la mayoría de las compilaciones y está habilitada por defecto en Windows; en Linux es posible que necesites compilar PHP con--with-calendaro instalar un paquete comophp-calendar.
¿Qué es un número de día juliano?
Un número de día juliano (JDN, por sus siglas en inglés) es la cantidad de días transcurridos desde el mediodía (UTC) del 1 de enero de 4713 a. C. en el calendario juliano proléptico. No debe confundirse con el calendario juliano — a pesar del nombre compartido, el número de día juliano es simplemente un contador continuo de días sin meses ni años.
El JDN es el formato puente para la extensión de calendario de PHP. Cada función *tojd() (jewishtojd(), gregoriantojd(), juliantojd(), frenchtojd()) produce un JDN, y cada función jdto*() consume uno. Así, toda conversión entre calendarios pasa por él:
Jewish date ──jewishtojd()──▶ JDN ──jdtogregorian()──▶ Gregorian dateFirma de la función
jewishtojd(int $month, int $day, int $year): int| Parámetro | Descripción |
|---|---|
$month | Número del mes judío donde 1 = Tishri, no enero (consulta el error común más abajo). El rango válido es 1–13. |
$day | Día del mes, 1–30. |
$year | Año judío, contado desde la fecha tradicional de la creación (año 1 ≈ 3761 a. C.). |
Devuelve el número de día juliano como un entero, o 0 para una fecha fuera del rango admitido (años aproximadamente 1 a 9999).
Error común: la numeración de meses comienza en Tishri
Este es el error más habitual con jewishtojd(). El año religioso judío comienza en primavera (Nisán), pero PHP numera los meses a partir de Tishri (el año nuevo civil, Rosh Hashaná). Por lo tanto:
| # | Mes (año no bisiesto) |
|---|---|
| 1 | Tishri |
| 2 | Heshvan |
| 3 | Kislev |
| 4 | Tevet |
| 5 | Shevat |
| 6 | Adar |
| 7 | Adar (igual que 6 en un año no bisiesto) |
| 8 | Nisan |
| 9 | Iyyar |
| 10 | Sivan |
| 11 | Tammuz |
| 12 | Av |
| 13 | Elul |
En un año bisiesto se inserta un mes adicional: el mes 6 pasa a ser Adar I y el mes 7 pasa a ser Adar II. Pasar 6 no equivale a junio ni a Siván — Siván es el mes 10.
Ejemplo básico
Este ejemplo convierte 6 Siván 5783 (la festividad de Shavuot, que es el décimo mes, día 6) a su número de día juliano y luego de vuelta a una fecha gregoriana para verificarlo:
Conversión de una fecha judía a un número de día juliano
<?php
$jewishMonth = 10; // Sivan
$jewishDay = 6;
$jewishYear = 5783;
$jdn = jewishtojd($jewishMonth, $jewishDay, $jewishYear);
echo "Julian Day Count: " . $jdn . "\n";
echo "Gregorian date: " . jdtogregorian($jdn) . "\n";Salida:
Julian Day Count: 2460091
Gregorian date: 5/26/2023Entonces, 6 Siván 5783 corresponde al 26 de mayo de 2023 en el calendario gregoriano.
Conversión de una fecha judía a gregoriana
Combinar jewishtojd() con jdtogregorian() es el caso de uso más habitual en la práctica — por ejemplo, encontrar la fecha gregoriana de Rosh Hashaná (1 Tishri):
<?php
function jewishToGregorian(int $month, int $day, int $year): string
{
$jdn = jewishtojd($month, $day, $year);
if ($jdn === 0) {
return "Invalid Jewish date";
}
return jdtogregorian($jdn);
}
echo jewishToGregorian(1, 1, 5784) . "\n"; // Rosh Hashanah 5784Salida:
9/16/2023Conversión inversa con jdtojewish()
La función inversa de jewishtojd() es jdtojewish(), que convierte un número de día juliano de vuelta a una cadena de fecha judía con formato mes/día/año. La conversión de ida y vuelta es una buena forma de confirmar que la numeración de meses es correcta:
<?php
$jdn = jewishtojd(10, 6, 5783); // 6 Sivan 5783
echo "JDN: " . $jdn . "\n";
echo "Jewish: " . jdtojewish($jdn) . "\n"; // month/day/yearSalida:
JDN: 2460091
Jewish: 10/6/5783Manejo de entradas no válidas
Para una fecha que PHP no puede representar, jewishtojd() devuelve 0 en lugar de lanzar un error, por lo que siempre debes comprobarlo antes de pasar el resultado a otra función:
<?php
$jdn = jewishtojd(0, 5, 5783); // month 0 is invalid
var_dump($jdn); // int(0)
echo $jdn === 0 ? "Out of range\n" : jdtogregorian($jdn) . "\n";Salida:
int(0)
Out of range¿Cuándo usaría esto?
- Para mostrar fechas hebreas/festivas de una base de datos en el calendario gregoriano local del usuario.
- Para calcular el número de días entre dos fechas expresadas en distintos sistemas de calendarios (restando sus JDN).
- Para encontrar el día de la semana de una fecha judía pasando el JDN a
jddayofweek().
Conclusión
jewishtojd() convierte una fecha del calendario judío (hebreo) en un número de día juliano, el entero neutral respecto al calendario que la extensión de calendario de PHP utiliza como pivote para todas las conversiones entre calendarios. Las dos cosas que hay que recordar son que la numeración de meses comienza en Tishri (1), no en Nisán, y que la función devuelve 0 para fechas fuera del rango admitido. Combínala con jdtogregorian(), jdtojewish() o jddayofweek() para construir flujos de trabajo completos con fechas.