W3docs

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 ValueError en PHP 8.0+ (las versiones anteriores devolvían false).

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:00

Dado 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:

php— editable, runs on the server

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ígitos
  • m — mes con ceros iniciales (0112)
  • M — abreviatura del mes (JanDec)
  • d — día del mes con ceros iniciales (0131)
  • D — abreviatura del día de la semana (SunSat)
  • g — hora en formato de 12 horas sin cero inicial (112)
  • H — hora en formato de 24 horas con ceros iniciales (0023)
  • i — minutos con ceros iniciales (0059)
  • s — segundos con ceros iniciales (0059)
  • aam/pm en 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; // 1644949020

strtotime() 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.

Práctica

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