PHP Calendrier
Apprenez à travailler avec les dates, heures et calendriers en PHP en utilisant date(), mktime(), strtotime() et la classe DateTime.
Introduction
Ce chapitre explique comment travailler avec les dates, les heures et les calendriers en PHP. Vous apprendrez les fonctions de base pour la gestion des dates et des heures, comment construire une grille de calendrier pour un mois donné, et les meilleures pratiques pour maintenir une logique de date correcte dans différents fuseaux horaires. Chaque exemple est court et exécutable, vous pouvez donc le coller directement dans un fichier PHP.
Pour approfondir certains sujets, consultez les chapitres connexes sur la date et l'heure PHP, la fonction date() et les fuseaux horaires PHP.
Comprendre les fonctions de date et d'heure en PHP
PHP fournit un ensemble robuste de fonctions de date et d'heure pour formater, calculer et manipuler les dates, les heures et les fuseaux horaires. Ces fonctions sont essentielles pour les applications qui doivent travailler avec des données temporelles telles que les planificateurs, les systèmes de réservation et, bien entendu, les calendriers.
PHP intègre également une Extension Calendrier distincte (cal_days_in_month(), jdtogregorian() et autres) permettant de convertir entre des systèmes calendaires tels que le calendrier julien, grégorien et hébreu. Ces deux notions sont souvent confondues : l'Extension Calendrier convertit entre les systèmes, tandis que les fonctions de date/heure ci-dessous gèrent le formatage et l'arithmétique au quotidien. La plupart des tâches de type « construire un calendrier » n'ont besoin que des fonctions de date/heure.
Fonctions de date et d'heure PHP courantes
date()– Formate une chaîne de date et d'heure locale selon un format spécifié.echo date("Y-m-d H:i:s"); // Outputs: 2023-10-25 14:30:00mktime()– Crée un horodatage Unix pour une date et une heure spécifiées.Remarque :echo mktime(14, 30, 0, 10, 25, 2023); // Outputs: 1698237000mktime()s'appuie sur le fuseau horaire par défaut du serveur. Pour des résultats reproductibles, définissez explicitement un fuseau horaire avecdate_default_timezone_set()ouDateTimeZone.strtotime()– Convertit une chaîne de date/heure textuelle en anglais en horodatage Unix.echo strtotime("now"); // Outputs: current timestamp echo strtotime("+1 day"); // Outputs: timestamp for tomorrowtime()– Retourne l'horodatage Unix actuel.echo time(); // Outputs: current timestampDateTime&DateTimeImmutable– Classes orientées objet pour une manipulation et un formatage des dates/heures plus sûrs.$dt = new DateTime('2023-10-25 14:30:00'); echo $dt->format('Y-m-d H:i:s');
En plus de ces fonctions, il en existe bien d'autres pour manipuler les dates et les heures. Comprendre leur fonctionnement vous permet de créer des applications PHP efficaces et fiables.
Combien de jours compte un mois ?
Une tâche courante dans la gestion des calendriers consiste à déterminer le nombre de jours d'un mois donné, qui varie et dépend des années bissextiles pour février. Il existe deux méthodes fiables pour ce faire :
// Using the Calendar Extension (requires ext-calendar)
echo cal_days_in_month(CAL_GREGORIAN, 2, 2024); // Outputs: 29 (2024 is a leap year)
// Using date() with the 't' format character (no extension needed)
echo date('t', mktime(0, 0, 0, 2, 1, 2024)); // Outputs: 29L'approche date('t', ...) est portable car elle ne dépend pas de l'installation de l'Extension Calendrier.
Construire un calendrier simple pour un mois
En rassemblant tous les éléments, voici comment afficher les jours d'un mois alignés sous les colonnes des jours de la semaine. Nous trouvons le premier jour de la semaine du mois avec date('w', ...) (0 = dimanche) et le nombre de jours avec date('t', ...) :
$month = 10;
$year = 2023;
$firstDayTimestamp = mktime(0, 0, 0, $month, 1, $year);
$daysInMonth = (int) date('t', $firstDayTimestamp);
$startWeekday = (int) date('w', $firstDayTimestamp); // 0 = Sunday
echo "Su Mo Tu We Th Fr Sa\n";
// Pad the first row so day 1 lands under the correct weekday.
echo str_repeat(' ', $startWeekday);
for ($day = 1; $day <= $daysInMonth; $day++) {
printf('%2d ', $day);
// Break to a new line after Saturday.
if (($startWeekday + $day) % 7 === 0) {
echo "\n";
}
}
echo "\n";Cette boucle affiche octobre 2023 sous forme de grille de calendrier. Pour en savoir plus sur la boucle utilisée ici, consultez les boucles PHP.
Meilleures pratiques pour l'utilisation des fonctions de date et d'heure en PHP
Lors de l'utilisation des fonctions de date et d'heure PHP, il est important de suivre les meilleures pratiques pour garantir que vos applications sont efficaces et performantes. Voici quelques conseils à garder à l'esprit :
- Préférez les objets
DateTimeetDateTimeImmutableaux fonctions procédurales pour une meilleure lisibilité et une gestion intégrée des fuseaux horaires. - Définissez toujours un fuseau horaire explicite avec
DateTimeZoneoudate_default_timezone_set()pour éviter des décalages inattendus lors des changements d'heure ou des migrations de serveur. - Validez les dates analysées avec
DateTime::getLastErrors()pour détecter les entrées invalides rapidement et éviter les échecs silencieux. - Mettez en cache les horodatages calculés ou les chaînes formatées dans les boucles critiques pour réduire la surcharge des appels de fonctions.
Conclusion
Les fonctions de date et d'heure de PHP sont une partie essentielle de toute application PHP qui doit travailler avec des données temporelles. En comprenant le fonctionnement de ces fonctions et en suivant les meilleures pratiques, vous pouvez développer des applications fiables et efficaces.