W3docs

easter_date()

Calcola la data di Pasqua in PHP con easter_date() e easter_days(), con esempi sicuri per i fusi orari.

Introduzione

Calcolare programmaticamente la data di Pasqua è un'esigenza sorprendentemente comune — le app di calendario, i sistemi di pianificazione e i software per le buste paga devono sapere in quale giorno dell'anno cade la Pasqua, poiché la data cambia ogni anno. PHP include due funzioni integrate per questo scopo, easter_date() e easter_days(). Questo capitolo spiega come viene calcolata la Pasqua, il comportamento di ciascuna funzione e quale scegliere per evitare problemi con i fusi orari.

Perché la data di Pasqua cambia

La Pasqua è una festa mobile: a differenza del Natale, non ha una data fissa nel calendario. Secondo la regola stabilita dal Concilio di Nicea nel 325 d.C., la domenica di Pasqua è la prima domenica dopo il primo plenilunio che cade il giorno dell'equinozio di primavera o successivamente. Poiché dipende dal ciclo lunare, la data oscilla tra il 22 marzo e il 25 aprile da un anno all'altro.

PHP implementa internamente l'algoritmo standard del computus, quindi non è mai necessario calcolare la fase lunare manualmente.

easter_date()

easter_date() restituisce il timestamp Unix della domenica di Pasqua di un determinato anno.

  • Firma: easter_date(?int $year = null, int $mode = CAL_EASTER_DEFAULT): int
  • Parametri: L'anno a quattro cifre $year (il valore predefinito è l'anno corrente). Il parametro opzionale $mode seleziona il calcolo gregoriano o giuliano.
  • Valore restituito: Un timestamp Unix per la domenica di Pasqua.

Nota: Un errore comune è passare un timestamp a easter_date(). L'argomento è un anno (ad esempio 2023), non un timestamp. Passare mktime(...) produce un risultato errato.

Il problema riguarda i fusi orari. Il timestamp restituito punta a mezzogiorno UTC della domenica di Pasqua, quindi formattandolo con date() sotto un fuso orario predefinito a ovest di UTC si può ottenere il giorno precedente. Per la visualizzazione, è preferibile l'approccio con easter_days() descritto di seguito.

easter_days()

easter_days() restituisce il numero di giorni dopo il 21 marzo in cui cade la Pasqua, invece di un timestamp. È il blocco costruttivo sicuro per i fusi orari: combinandolo con una semplice data del calendario si ottiene il giorno corretto indipendentemente da date_default_timezone_set().

  • Firma: easter_days(?int $year = null, int $mode = CAL_EASTER_DEFAULT): int
  • Valore restituito: Un offset intero (ad esempio, 19 significa 21 marzo + 19 giorni).

Disponibilità: easter_date() e easter_days() fanno parte dell'estensione calendario di PHP. Sono state integrate nel core in PHP 8.0 e sono ancora disponibili nelle versioni correnti di PHP (8.x) — non sono state rimosse. Se compare l'errore Call to undefined function easter_date() su una build precedente, abilitare l'estensione calendar.

Codice di esempio

Consigliato — sicuro per i fusi orari tramite easter_days()

<?php

$year = 2023;
$easter = (new DateTimeImmutable("$year-03-21"))
    ->modify('+' . easter_days($year) . ' days');

echo $easter->format('F j, Y'); // Outputs: April 9, 2023

Soluzione rapida con easter_date()

<?php

$year = 2023;
echo date('F j, Y', easter_date($year));

easter_date() ancora il timestamp a mezzogiorno UTC, quindi il giorno del calendario visualizzato dipende dal fuso orario di formattazione — si noti come lo stesso anno venga stampato diversamente di seguito. Questo è esattamente il motivo per cui la versione con easter_days() mostrata sopra è la scelta più sicura:

<?php

date_default_timezone_set('UTC');
echo date('F j, Y H:i', easter_date(2024)); // Outputs: March 30, 2024 20:00

Letture correlate

Conclusione

La Pasqua è una festa mobile, quindi la sua data deve essere calcolata dal calendario lunare ogni anno. PHP esegue i calcoli complessi tramite l'estensione calendario. Per il codice di visualizzazione, preferire easter_days() combinato con un DateTimeImmutable in modo che il risultato non sia influenzato dal fuso orario del server; usare easter_date() per ottenere rapidamente un timestamp quando si controlla il fuso orario predefinito.

Esercitazione

Pratica
Cosa restituisce la funzione easter_date() in PHP?
Cosa restituisce la funzione easter_date() in PHP?
Was this page helpful?