W3docs

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 ValueError in PHP 8.0+ (le versioni precedenti restituivano false).

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

Poiché 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:

php— editable, runs on the server

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 cifre
  • m — mese con zero iniziale (0112)
  • M — abbreviazione del mese (JanDec)
  • d — giorno del mese con zero iniziale (0131)
  • D — abbreviazione del giorno della settimana (SunSat)
  • g — ora, formato 12 ore, senza zero iniziale (112)
  • H — ora, formato 24 ore con zero iniziale (0023)
  • i — minuti con zero iniziale (0059)
  • s — secondi con zero iniziale (0059)
  • aam/pm minuscolo

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; // 1644949020

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

Esercitazione

Pratica
Cosa fa la funzione jdtounix() di PHP?
Cosa fa la funzione jdtounix() di PHP?
Was this page helpful?