W3docs

Come Convertire una Data Ebraica in Data Giuliana in PHP

Scopri come usare jewishtojd() in PHP per convertire date del calendario ebraico in Julian Day Count e poi in date gregoriane.

La funzione jewishtojd() di PHP converte una data nel calendario ebraico (ebraico) in un Julian Day Count — un singolo intero che identifica univocamente un giorno. Poiché i Julian Day Count sono indipendenti dal calendario, fungono da "perno" comune che consente di convertire tra sistemi di calendario: converti una data ebraica in un Julian Day, poi converti quel numero in una data gregoriana (o in qualsiasi altro calendario supportato). Questa pagina spiega come funziona la funzione, i suoi parametri e i casi limite, e mostra esempi verificati ed eseguibili.

Le funzioni Calendar richiedono l'estensione PHP calendar. Viene fornita con la maggior parte delle build ed è abilitata per impostazione predefinita su Windows; su Linux potrebbe essere necessario compilare PHP con --with-calendar o installare un pacchetto come php-calendar.

Cos'è un Julian Day Count?

Un Julian Day Count (JDN) è il numero di giorni trascorsi dal mezzogiorno (UTC) del 1° gennaio 4713 a.C. nel calendario giuliano prolettico. Non va confuso con il calendario giuliano — nonostante il nome condiviso, il Julian Day Count è semplicemente un contatore continuo di giorni senza mesi o anni.

Il JDN è il formato ponte per l'estensione calendario di PHP. Ogni funzione *tojd() (jewishtojd(), gregoriantojd(), juliantojd(), frenchtojd()) produce un JDN, e ogni funzione jdto*() ne consuma uno. Quindi tutte le conversioni tra calendari passano per esso:

Jewish date ──jewishtojd()──▶ JDN ──jdtogregorian()──▶ Gregorian date

Firma della funzione

jewishtojd(int $month, int $day, int $year): int
ParametroDescrizione
$monthNumero del mese ebraico dove 1 = Tishri, non gennaio (vedi la nota sotto). L'intervallo valido è 1–13.
$dayGiorno del mese, 1–30.
$yearAnno ebraico, contato dalla data tradizionale della creazione (anno 1 ≈ 3761 a.C.).

Restituisce il Julian Day Count come intero, oppure 0 per una data fuori dall'intervallo supportato (anni approssimativamente da 1 a 9999).

Attenzione: la numerazione dei mesi inizia da Tishri

Questo è l'errore più comune con jewishtojd(). L'anno religioso ebraico inizia in primavera (Nisan), ma PHP numera i mesi a partire da Tishri (il capodanno civile, Rosh Hashanah). Quindi:

#Mese (anno non bisestile)
1Tishri
2Heshvan
3Kislev
4Tevet
5Shevat
6Adar
7Adar (uguale al 6 in un anno non bisestile)
8Nisan
9Iyyar
10Sivan
11Tammuz
12Av
13Elul

In un anno bisestile viene inserito un mese extra: il mese 6 diventa Adar I e il mese 7 diventa Adar II. Passare 6 non significa giugno o Sivan — Sivan è il mese 10.

Esempio di base

Questo converte 6 Sivan 5783 (la festa di Shavuot, che è il 10° mese, giorno 6) nel suo Julian Day Count, poi di nuovo in una data gregoriana per verificarne la correttezza:

Conversione di una data ebraica in Julian Day Count

<?php

$jewishMonth = 10; // Sivan
$jewishDay   = 6;
$jewishYear  = 5783;

$jdn = jewishtojd($jewishMonth, $jewishDay, $jewishYear);

echo "Julian Day Count: " . $jdn . "\n";
echo "Gregorian date:   " . jdtogregorian($jdn) . "\n";

Output:

Julian Day Count: 2460091
Gregorian date:   5/26/2023

Quindi il 6 Sivan 5783 corrisponde al 26 maggio 2023 nel calendario gregoriano.

Conversione di una data ebraica in gregoriana

Abbinare jewishtojd() con jdtogregorian() è il caso d'uso tipico nel mondo reale — ad esempio, trovare la data gregoriana di Rosh Hashanah (1 Tishri):

<?php

function jewishToGregorian(int $month, int $day, int $year): string
{
    $jdn = jewishtojd($month, $day, $year);

    if ($jdn === 0) {
        return "Invalid Jewish date";
    }

    return jdtogregorian($jdn);
}

echo jewishToGregorian(1, 1, 5784) . "\n"; // Rosh Hashanah 5784

Output:

9/16/2023

Round-trip con jdtojewish()

L'inverso di jewishtojd() è jdtojewish(), che converte un Julian Day Count di nuovo in una stringa di data ebraica nel formato mese/giorno/anno. Il round-trip è un buon modo per confermare che la numerazione dei mesi sia corretta:

<?php

$jdn = jewishtojd(10, 6, 5783); // 6 Sivan 5783
echo "JDN:    " . $jdn . "\n";
echo "Jewish: " . jdtojewish($jdn) . "\n"; // month/day/year

Output:

JDN:    2460091
Jewish: 10/6/5783

Gestione dell'input non valido

Per una data che PHP non riesce a rappresentare, jewishtojd() restituisce 0 invece di generare un errore, quindi è necessario verificarlo sempre prima di passare il risultato a un'altra funzione:

<?php

$jdn = jewishtojd(0, 5, 5783); // month 0 is invalid

var_dump($jdn);                // int(0)
echo $jdn === 0 ? "Out of range\n" : jdtogregorian($jdn) . "\n";

Output:

int(0)
Out of range

Quando usare questa funzione?

  • Visualizzare date ebraiche/festività da un database nel calendario gregoriano locale dell'utente.
  • Calcolare il numero di giorni tra due date espresse in sistemi di calendario diversi (sottraendo i loro JDN).
  • Trovare il giorno della settimana per una data ebraica passando il JDN a jddayofweek().

Conclusione

jewishtojd() converte una data del calendario ebraico (ebraico) in un Julian Day Count, l'intero indipendente dal calendario che l'estensione calendario di PHP usa come perno per tutte le conversioni tra calendari. Le due cose da ricordare sono che la numerazione dei mesi inizia da Tishri (1), non da Nisan, e che la funzione restituisce 0 per le date fuori dall'intervallo. Combinala con jdtogregorian(), jdtojewish() o jddayofweek() per costruire flussi di lavoro completi con le date.

Esercitazione

Pratica
Qual è la funzione di jewishtojd() in PHP?
Qual è la funzione di jewishtojd() in PHP?
Was this page helpful?