PHP jdtounix() — Convertir un día juliano a marca de tiempo Unix
Aprende cómo la función jdtounix() de PHP convierte un número de día juliano en una marca de tiempo Unix, con sintaxis, ejemplos y rango de fechas válido.
La función jdtounix() convierte un número de día juliano en una marca de tiempo Unix. Pertenece a la extensión de calendario de PHP y actúa como puente entre las operaciones de fechas basadas en días enteros y el tiempo basado en segundos que usan el resto de las funciones de fecha de PHP.
Esta página explica qué son esos dos sistemas de numeración, muestra jdtounix() en acción, cubre su rango válido y sus particularidades, y termina con las conversiones de marca de tiempo Unix más amplias que usarás con mucha más frecuencia (date() y strtotime()).
Dos formas de contar el tiempo
Antes de usar jdtounix(), conviene saber exactamente qué convierte.
Una marca de tiempo Unix es el número de segundos transcurridos desde 1970-01-01 00:00:00 UTC (el "epoch Unix"). Es el estándar que PHP usa en todas partes: time(), date(), strtotime() y DateTime trabajan con marcas de tiempo Unix.
Un número de día juliano (JDC, por sus siglas en inglés) es el número de días enteros transcurridos desde el mediodía del 1 de enero de 4713 a. C. (en el calendario juliano proléptico). Los astrónomos y las bibliotecas de calendarios lo utilizan porque asigna un único entero a cada día, lo que facilita contar los días entre fechas de distintos sistemas de calendario. Las funciones gregoriantojd(), jdtogregorian() y similares de PHP producen y consumen estos conteos.
jdtounix() traduce un JDC al equivalente de marca de tiempo Unix a medianoche UTC de ese día.
Sintaxis
jdtounix(int $julian_day): int$julian_day— el número de día juliano a convertir.- Devuelve la marca de tiempo Unix correspondiente. El día debe estar dentro del rango admitido; un valor fuera del rango lanza un
ValueErroren PHP 8.0+ (las versiones anteriores devolvíanfalse).
Ejemplo básico
Rara vez se dispone de un número de día juliano directamente, por lo que el flujo habitual es: convertir una fecha gregoriana a un JDC con gregoriantojd() y luego pasarlo a jdtounix().
<?php
// Build the Julian Day Count for 15 February 2022 (month, day, year).
$jd = gregoriantojd(2, 15, 2022);
echo $jd, "\n"; // 2459626
// Convert that day to a Unix timestamp (midnight UTC).
$timestamp = jdtounix($jd);
echo $timestamp, "\n"; // 1644883200
// Confirm by formatting it back to a readable date.
echo gmdate('Y-m-d H:i:s', $timestamp); // 2022-02-15 00:00:00Dado que un día juliano representa un día completo y no un momento concreto, jdtounix() siempre devuelve la marca de tiempo para las 00:00:00 UTC de ese día. La información sobre la hora del día simplemente no forma parte de la entrada.
Rango válido
jdtounix() solo funciona dentro del intervalo del epoch Unix. El día más bajo que acepta es 1970-01-01, que corresponde a la marca de tiempo 0:
<?php
// 1 January 1970 is the lowest day jdtounix() can represent.
var_dump(jdtounix(gregoriantojd(1, 1, 1970))); // int(0)Pasar un día anterior al epoch es un error: en PHP 8.0 y versiones posteriores lanza un ValueError, mientras que PHP 7 devolvía false. Si el día de entrada lo proporciona el usuario, valida el rango (o envuelve la llamada en un bloque try/catch) antes de confiar en el resultado. En sistemas donde las marcas de tiempo se almacenan como enteros con signo de 32 bits, el límite superior práctico está en el año 2038.
La función inversa es unixtojd(), que convierte una marca de tiempo Unix de vuelta a un número de día juliano.
Convertir una marca de tiempo Unix a una fecha legible
Una vez que tienes una marca de tiempo — proveniente de jdtounix(), time() o una base de datos — puedes formatearla para los usuarios con la función date(). Esta acepta una cadena de formato y una marca de tiempo:
Las barras invertidas en \a\t escapan las letras a y t para que se impriman literalmente en lugar de interpretarse como caracteres de formato. Algunos de los caracteres de formato más comunes son:
Y— año de cuatro dígitosm— mes con ceros iniciales (01–12)M— abreviatura del mes (Jan–Dec)d— día del mes con ceros iniciales (01–31)D— abreviatura del día de la semana (Sun–Sat)g— hora en formato de 12 horas sin cero inicial (1–12)H— hora en formato de 24 horas con ceros iniciales (00–23)i— minutos con ceros iniciales (00–59)s— segundos con ceros iniciales (00–59)a—am/pmen minúsculas
Una nota sobre las zonas horarias
PHP formatea cada marca de tiempo según la zona horaria predeterminada del script, por lo que la misma marca de tiempo puede mostrarse como horas distintas en servidores diferentes. Establece la zona horaria explícitamente al inicio de tu script — con date_default_timezone_set() como se muestra arriba — para que los resultados sean reproducibles en cualquier entorno. Los ejemplos de esta página usan UTC.
Convertir una fecha legible a una marca de tiempo Unix
En sentido contrario, strtotime() analiza una descripción de fecha en inglés y devuelve una marca de tiempo Unix:
<?php
date_default_timezone_set('UTC');
$timestamp = strtotime('February 15, 2022 6:17 pm');
echo $timestamp; // 1644949020strtotime() entiende muchos formatos — 2022-02-15, next Friday, +1 week — pero es estricto con la redacción. Las palabras de relleno como at no están permitidas: strtotime('February 15, 2022 at 6:17 pm') devuelve false. Cuando el análisis falla, strtotime() devuelve false, así que valida su resultado antes de usarlo.
¿Cuándo usaría jdtounix()?
Para el trabajo cotidiano de "almacenar y mostrar una fecha", usa date(), strtotime() y DateTime — gestionan fechas y horas reales de forma directa. Usa jdtounix() (con gregoriantojd()) cuando ya estés trabajando con números de día juliano, por ejemplo al integrar datos astronómicos, interoperar con otro sistema de calendario o contar días enteros entre fechas y necesitar después una marca de tiempo estándar.
Conversión de un vistazo
graph LR;
A[Gregorian date] -->|gregoriantojd| B[Julian Day Count];
B -->|jdtounix| C[Unix timestamp];
C -->|unixtojd| B;
C -->|date| D[Readable string];Conclusión
jdtounix() convierte un número de día juliano en la marca de tiempo Unix para la medianoche UTC de ese día, devolviendo false para los días fuera del rango del epoch. Se combina de forma natural con gregoriantojd() en la entrada y con unixtojd() para el viaje inverso. Para el manejo habitual de fechas, el conjunto de herramientas más amplio de PHP Date and Time — especialmente date() y strtotime() — es lo que usarás con más frecuencia.