PHP jdtounix() — Converti un Giorno Giuliano in un Timestamp Unix
Scopri come jdtounix() converte un Giorno Giuliano in un timestamp Unix, con sintassi, esempi, intervallo valido e uso con gregoriantojd() e date().
La funzione jdtounix() converte un Conteggio di Giorni Giuliani in un timestamp Unix. Appartiene all'estensione calendario di PHP ed è il collegamento tra la matematica delle date in stile calendario (che lavora in giorni interi) e il tempo basato sui secondi utilizzato dal resto delle funzioni di data di PHP.
Questa pagina spiega cosa sono questi due sistemi numerici, mostra jdtounix() in azione, copre il suo intervallo valido e i possibili problemi, e si conclude con le conversioni di timestamp Unix più comunemente usate (date() e strtotime()).
Due modi di contare il tempo
Prima di usare jdtounix(), è utile capire esattamente cosa converte.
Un timestamp Unix è il numero di secondi trascorsi dal 1970-01-01 00:00:00 UTC (il "Unix epoch"). È lo standard che PHP usa ovunque — time(), date(), strtotime() e DateTime parlano tutti in timestamp Unix.
Un Conteggio di Giorni Giuliani (JDC) è il numero di giorni interi trascorsi dal mezzogiorno del 1° gennaio 4713 a.C. (nel calendario giuliano prolettico). Gli astronomi e le librerie di calendario lo usano perché assegna a ogni giorno un singolo intero, rendendo banale il conteggio dei giorni tra date in diversi sistemi di calendario. Le funzioni gregoriantojd(), jdtogregorian() e simili di PHP producono e consumano questi conteggi.
jdtounix() traduce un JDC nel timestamp Unix equivalente alla mezzanotte UTC di quel giorno.
Sintassi
jdtounix(int $julian_day): int$julian_day— il Conteggio di Giorni Giuliani da convertire.- Restituisce il timestamp Unix corrispondente. Il giorno deve rientrare nell'intervallo supportato; un valore fuori intervallo genera un
ValueErrorin PHP 8.0+ (le versioni precedenti restituivanofalse).
Esempio di base
Di rado si ha un numero di Giorno Giuliano a disposizione, quindi il flusso tipico è: convertire una data gregoriana in un JDC con gregoriantojd(), poi passarlo 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:00Poiché un Giorno Giuliano rappresenta un intero giorno e non un momento preciso, jdtounix() restituisce sempre il timestamp per le 00:00:00 UTC di quel giorno. Le informazioni sull'ora del giorno semplicemente non fanno parte dell'input.
Intervallo valido
jdtounix() funziona solo all'interno della finestra dell'epoch Unix. Il giorno più basso accettato è 1970-01-01, che corrisponde al timestamp 0:
<?php
// 1 January 1970 is the lowest day jdtounix() can represent.
var_dump(jdtounix(gregoriantojd(1, 1, 1970))); // int(0)Passare un giorno precedente all'epoch è un errore: in PHP 8.0 e versioni successive genera un ValueError, mentre PHP 7 restituiva false. Se il giorno di input è fornito dall'utente, valida l'intervallo (o racchiudi la chiamata in un try/catch) prima di fare affidamento sul risultato. Sui sistemi in cui i timestamp sono memorizzati come interi con segno a 32 bit, il limite superiore pratico è nell'anno 2038.
La funzione inversa è unixtojd(), che converte un timestamp Unix in un Conteggio di Giorni Giuliani.
Convertire un timestamp Unix in una data leggibile
Una volta ottenuto un timestamp — da jdtounix(), time() o un database — lo si formatta per gli esseri umani con la funzione date(). Accetta una stringa di formato e un timestamp:
Le barre rovesciate in \a\t eseguono l'escape delle lettere a e t in modo che vengano stampate letteralmente invece di essere interpretate come caratteri di formato. Alcuni dei caratteri di formato più comuni sono:
Y— anno a quattro cifrem— mese con zero iniziale (01–12)M— abbreviazione del mese (Jan–Dec)d— giorno del mese con zero iniziale (01–31)D— abbreviazione del giorno della settimana (Sun–Sat)g— ora, formato 12 ore, senza zero iniziale (1–12)H— ora, formato 24 ore con zero iniziale (00–23)i— minuti con zero iniziale (00–59)s— secondi con zero iniziale (00–59)a—am/pmminuscolo
Una nota sui fusi orari
PHP formatta ogni timestamp in base al fuso orario predefinito dello script, quindi lo stesso timestamp può essere visualizzato come orari diversi su server diversi. Imposta il fuso orario esplicitamente all'inizio dello script — con date_default_timezone_set() come sopra — in modo che i risultati siano riproducibili ovunque. Gli esempi in questa pagina usano UTC.
Convertire una data leggibile in un timestamp Unix
Nel senso inverso, strtotime() analizza una descrizione di data in inglese e la converte in un timestamp Unix:
<?php
date_default_timezone_set('UTC');
$timestamp = strtotime('February 15, 2022 6:17 pm');
echo $timestamp; // 1644949020strtotime() comprende molti formati — 2022-02-15, next Friday, +1 week — ma è rigoroso riguardo alla sintassi. Parole di collegamento come at non sono ammesse: strtotime('February 15, 2022 at 6:17 pm') restituisce false. Quando il parsing fallisce, strtotime() restituisce false, quindi valida il risultato prima di usarlo.
Quando usare jdtounix()?
Per il lavoro quotidiano di "memorizzare e visualizzare una data", usa date(), strtotime() e DateTime — gestiscono direttamente date e orari reali del calendario. Usa jdtounix() (con gregoriantojd()) quando stai già lavorando con numeri di Giorni Giuliani, ad esempio quando integri dati astronomici, interoperi con un altro sistema di calendario, o conti giorni interi tra date per poi ottenere un timestamp standard.
Conversione a colpo d'occhio
graph LR;
A[Gregorian date] -->|gregoriantojd| B[Julian Day Count];
B -->|jdtounix| C[Unix timestamp];
C -->|unixtojd| B;
C -->|date| D[Readable string];Conclusione
jdtounix() converte un Conteggio di Giorni Giuliani nel timestamp Unix per la mezzanotte UTC di quel giorno, restituendo false per i giorni fuori dall'intervallo dell'epoch. Si abbina naturalmente a gregoriantojd() in ingresso e a unixtojd() per il percorso inverso. Per la gestione ordinaria delle date, il toolkit più ampio in PHP Date and Time — in particolare date() e strtotime() — è quello che userai più spesso.