Les fonctionnalités critiques pour les entreprises reposent souvent sur des dates, telles que les abonnements, les paiements récurrents ou les réservations.
En tant que programmeur PHP, vous devrez probablement manipuler les dates/heures.
Bien que ce soit généralement une bonne pratique de s'en tenir aux API natives pour maîtriser votre métier et comprendre le fonctionnement du langage, soyons pragmatiques.
Carbon est une bibliothèque puissante qui étend DateTimeInterface, JsonSerialised et d'autres outils PHP natifs.
Il fournit des aides utiles pour manipuler les objets de date existants et nouveaux :
// Tomorrow CarbonImmutable::now()->add(1, 'day'); // Copy instance from another API $dateTime = new \DateTime('first day of January 2025'); $carbon = Carbon::instance($dateTime); // Parsing values $date = Carbon::parse('2050-01-01 12:34:00', 'UTC');
Carbon étend l'API native, mais l'objet DateTime fournit déjà des outils de calcul des dates et des heures :
$date = new DateTime('2024-07-23'); $date->add(new DateInterval('P10D')); echo $date->format('Y-m-d'); $date2 = new DateTime('2024-08-03'); $interval = $date->diff($date2); echo $interval->format('%R%a days');
Vous pouvez transmettre des chaînes pour obtenir des sorties spécifiques ou calculer des intervalles et des périodes.
$yesterday = Carbon::yesterday(); $today = Carbon::today(); $now = Carbon::now(); $tomorrow = Carbon::tomorrow(); $futureDate = Carbon::today()->addDays(21)->format('Y-m-d'); if ($now->isEndOfDay()) { // Some code }
La bibliothèque est pratique et robuste pour les comparaisons de dates, qui sont sujettes à diverses erreurs.
Carbon gère facilement les paramètres régionaux :
$now = Carbon::now()->locale('fr_FR'); echo $now->monthName;
Le comportement par défaut de PHP DateTime peut être trompeur lors de l'ajout ou de la soustraction de mois. Ça peut déborder !
Bien que vous puissiez parfois avoir besoin de ce comportement, Carbon offre un meilleur contrôle :
Carbon::useMonthsOverflow(false); Carbon::resetMonthsOverflow();
Vous pouvez également configurer des débordements dans chaque méthode lors de la manipulation des années ou des mois (par exemple, subMonthsNoOverflow, addMonthsWithOverflow).
Les dates peuvent être problématiques dans les tests unitaires en raison de la variabilité.
Carbon offre des capacités avancées de simulation, garantissant que les tests restent cohérents et fiables.
Cela évite les erreurs aléatoires qui peuvent interrompre vos pipelines CI/CD.
Que vous utilisiez Carbon ou non, il existe des moyens pratiques de réduire les bugs et incohérences potentiels :
Les versions récentes de PHP ont introduit de meilleures exceptions date/heure, vous permettant de détecter les entrées inattendues de manière plus cohérente.
Cependant, les implémentations peuvent parfois faire taire les mauvaises erreurs :
$dateInput = '2dsds'; $timestamp = strtotime($dateInput); echo date('Y-m-d', $timestamp); // Defaults back to 1970-01-01
Le code suivant n'est pas une amélioration, même s'il utilise un objet DateTime :
$dateInput = '2024-02-30'; // Invalid date (February has 28 days, 29 at most) $date = new DateTime($dateInput); echo $date->format('l \t\h\e jS F'); // Outputs "Friday the 1st March"
Donc, toujours validez les dates/heures :
$dateInput = '2dsds'; $timestamp = strtotime($dateInput); if (false === $timestamp) { throw new InvalidArgumentException(); } echo date('Y-m-d', $timestamp);
Et vérifiez profondément les entrées :
$format = 'Y-m-d'; $dateInput = '2024-02-30'; $dateInfo = date_parse($dateInput); if (!checkdate($dateInfo['day'], $dateInfo['month'], $dateInfo['year'])) { throw new InvalidArgumentException(); } $date = DateTimeImmutable::createFromFormat($format, $dateInput); echo $date->format('l \t\h\e jS F');
DateTimeImmutable ou CarbonImmutable ne peuvent pas être modifiés après la création. La plupart du temps, vous n'avez pas besoin de modifier la date initiale.
Si d'autres parties du code s'appuient sur cette instance, vous pourriez introduire de vilains bugs.
Les formats immuables évitent de tels effets secondaires et sont généralement meilleurs pour la lisibilité et les tests.
Négliger les fuseaux horaires est risqué :
Si vous ne spécifiez pas le fuseau horaire par défaut dans votre application, le serveur le déterminera.
Cependant, votre application peut être déployée sur des serveurs dans des fuseaux horaires différents.
Vous pouvez également être confronté à des complexités telles que l'heure d'été ou les formats de stockage (par exemple, UTC par rapport à l'heure locale), qui peuvent être moins pénibles avec une bibliothèque qui encourage les bonnes pratiques.
L'API native permet des manipulations avancées des dates et des heures, tandis que Carbon l'étend magnifiquement.
Les développeurs PHP peuvent exploiter cette couche supplémentaire pour simplifier les calculs et améliorer la lisibilité.
Que vous l'utilisiez ou non, assurez-vous de comprendre le comportement par défaut de l'objet PHP DateTime natif.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!