unixtojd()
Aprende a convertir un timestamp Unix a un número de Día Juliano en PHP con la función unixtojd(), con ejemplos y casos de uso prácticos.
Conversión de un Timestamp Unix a un Día Juliano en PHP
La función unixtojd() de PHP convierte un timestamp Unix en un número de Día Juliano — un entero único que cuenta el número de días transcurridos desde el inicio del Período Juliano (1 de enero de 4713 a.C. en el calendario juliano proléptico). Esta página explica qué devuelve la función, cómo llamarla, los casos en que difiere de la intuición y cómo convertir en sentido inverso.
Un timestamp Unix es el número de segundos transcurridos desde el 1 de enero de 1970, 00:00:00 UTC. Un Número de Día Juliano (JDN) es un conteo continuo de días ampliamente usado en astronomía y en cálculos de calendarios, porque la diferencia entre dos Días Julianos es simplemente el número de días entre ellos — sin necesidad de aritmética de meses ni años bisiestos. Tenga en cuenta que el "Día Juliano" aquí no es lo mismo que una fecha en el calendario juliano histórico; es un contador acumulativo de días.
Cómo Funciona unixtojd()
unixtojd() toma el número entero de segundos de un timestamp Unix, lo divide para obtener días completos y añade el Número de Día Juliano de la época Unix (1970-01-01), que es 2440588. La conversión se realiza en UTC y el resultado tiene granularidad de día — las horas, minutos y segundos del timestamp se descartan, por lo que cada momento dentro del mismo día UTC se asigna al mismo Día Juliano.
unixtojd() forma parte de la extensión Calendar de PHP. Se compila por defecto en la mayoría de las instalaciones, pero en una instalación mínima de PHP puede que necesites activar la extensión calendar antes de que la función esté disponible.
Sintaxis
unixtojd(?int $timestamp = null): int|false$timestamp— El timestamp Unix a convertir. Si se omite (o esnull), se usa la hora actual, exactamente como si hubieras pasadotime().- Devuelve un entero con el Número de Día Juliano, o
falsesi el timestamp no pudo convertirse.
Ejemplo Básico
Convierte el timestamp Unix actual a un Día Juliano:
Esto imprime el timestamp Unix actual y el Número de Día Juliano correspondiente.
Puntos de Referencia Conocidos
Dado que la conversión es fija, algunos timestamps siempre producen el mismo Día Juliano. Son útiles para verificar la corrección de tu código:
<?php
echo unixtojd(0), "\n"; // 2440588 -> 1970-01-01 (the Unix epoch)
echo unixtojd(mktime(0, 0, 0, 1, 1, 2000)), "\n"; // 2451545 -> 2000-01-01
echo unixtojd(mktime(0, 0, 0, 7, 4, 2025)), "\n"; // 2460861 -> 2025-07-04Llamarla Sin Argumento
Pasar ningún argumento equivale a pasar time(), por lo que ambas líneas a continuación devuelven el mismo valor:
<?php
echo unixtojd(), "\n"; // current day, no timestamp needed
echo unixtojd(time()), "\n"; // identical resultConversión Inversa: jdtounix()
La función inversa de unixtojd() es jdtounix(), que convierte un Número de Día Juliano de vuelta en un timestamp Unix configurado a medianoche UTC de ese día. Como unixtojd() descarta la hora del día, una conversión de ida y vuelta te lleva al inicio del día en lugar del momento original:
<?php
$start = mktime(15, 30, 0, 7, 4, 2025); // 2025-07-04 15:30:00
$jd = unixtojd($start);
$back = jdtounix($jd);
echo "Original: ", gmdate("Y-m-d H:i:s", $start), " UTC\n"; // 2025-07-04 15:30:00 UTC
echo "Back: ", gmdate("Y-m-d H:i:s", $back), " UTC\n"; // 2025-07-04 00:00:00 UTC¿Cuándo Usaría Esto?
Los Números de Día Juliano son ideales cuando necesitas contar días completos entre dos fechas sin preocuparte por la longitud de los meses ni los años bisiestos: cálculos astronómicos, lógica de programación, contadores de "días hasta" e interoperabilidad con conjuntos de datos científicos que almacenan fechas como Días Julianos. Para el formato y la aritmética de fechas ordinarias, la API DateTime y las funciones de fecha suelen ser la mejor opción.
Conclusión
unixtojd() convierte un timestamp Unix en un Número de Día Juliano — un conteo UTC a nivel de día con raíz en el valor de época 2440588. Por defecto usa la hora actual cuando se llama sin argumento, ignora la porción de hora del día y su función inversa es jdtounix(). Combínala con mktime() y time() para convertir cualquier momento en un Día Juliano para cálculos basados en días.