W3docs

easter_date()

Calculez la date de Pâques en PHP avec easter_date() et easter_days(), avec des exemples sans problème de fuseau horaire.

Introduction

Calculer la date de Pâques de manière programmatique est une tâche étonnamment courante — les applications de calendrier, les systèmes de planification et les logiciels de paie ont tous besoin de savoir quel jour de l'année tombe Pâques, car la date change chaque année. PHP fournit deux fonctions intégrées pour cela : easter_date() et easter_days(). Ce chapitre explique comment Pâques est calculé, comment chaque fonction se comporte, et laquelle utiliser pour éviter les problèmes de fuseau horaire.

Pourquoi la date de Pâques change

Pâques est une fête mobile : contrairement à Noël, elle n'a pas de date fixe dans le calendrier. Selon la règle établie au Concile de Nicée en 325 après J.-C., le dimanche de Pâques est le premier dimanche après la première pleine lune survenant le jour de l'équinoxe de printemps ou après celui-ci. Comme cela dépend du cycle lunaire, la date varie entre le 22 mars et le 25 avril d'une année à l'autre.

PHP implémente l'algorithme standard du computus en interne, vous n'avez donc jamais à calculer vous-même la phase lunaire.

easter_date()

easter_date() renvoie le timestamp Unix correspondant au dimanche de Pâques d'une année donnée.

  • Signature : easter_date(?int $year = null, int $mode = CAL_EASTER_DEFAULT): int
  • Paramètres : L'année à quatre chiffres $year (par défaut l'année en cours). Le $mode optionnel sélectionne le calcul grégorien ou julien.
  • Valeur de retour : Un timestamp Unix pour le dimanche de Pâques.

Remarque : Une erreur courante consiste à passer un timestamp à easter_date(). L'argument est une année (par exemple 2023), et non un timestamp. Passer mktime(...) produit un résultat incorrect.

Le piège concerne les fuseaux horaires. Le timestamp renvoyé pointe sur midi UTC du dimanche de Pâques, donc le formater avec date() sous un fuseau horaire par défaut à l'ouest de UTC peut faire reculer le résultat au jour précédent. Pour l'affichage, préférez l'approche easter_days() ci-dessous.

easter_days()

easter_days() renvoie le nombre de jours après le 21 mars auquel tombe Pâques, plutôt qu'un timestamp. C'est le bloc de construction sûr pour les fuseaux horaires : combinez-le avec une date calendaire simple et vous obtenez le bon jour quelle que soit la valeur de date_default_timezone_set().

  • Signature : easter_days(?int $year = null, int $mode = CAL_EASTER_DEFAULT): int
  • Valeur de retour : Un décalage entier (par exemple, 19 signifie 21 mars + 19 jours).

Disponibilité : easter_date() et easter_days() font partie de l'extension calendar de PHP. Elles ont été intégrées au cœur du langage dans PHP 8.0 et sont toujours disponibles dans les versions actuelles de PHP (8.x) — elles n'ont pas été supprimées. Si vous voyez Call to undefined function easter_date() sur une ancienne version, activez l'extension calendar.

Exemple de code

Recommandé — sûr pour les fuseaux horaires via 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

One-liner rapide avec easter_date()

<?php

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

easter_date() ancre le timestamp à midi UTC, donc le jour du calendrier que vous voyez dépend du fuseau horaire de formatage — notez comment la même année s'affiche différemment ci-dessous. C'est précisément pour cela que la version avec easter_days() ci-dessus est le choix le plus sûr :

<?php

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

Lectures associées

Conclusion

Pâques est une fête mobile, donc sa date doit être calculée à partir du calendrier lunaire chaque année. PHP effectue le calcul difficile pour vous grâce à l'extension calendar. Pour le code d'affichage, préférez easter_days() combiné avec un DateTimeImmutable afin que le résultat ne soit pas affecté par le fuseau horaire du serveur ; utilisez easter_date() pour obtenir rapidement un timestamp lorsque vous contrôlez le fuseau horaire par défaut.

Pratique

Pratique
Que renvoie la fonction easter_date() en PHP ?
Que renvoie la fonction easter_date() en PHP ?
Was this page helpful?