Retour vers le futur
Introduction
Cette quête a pour but de t'apprendre la manipulation des dates et heures avec PHP et en POO.
Pour un rappel sur la Programmation orientée objet, tu peux te référer à la suite de quêtes dédiées.
- Quête 684 (hors archive)
🤓 À la fin de cette quête, tu seras capable de :
- ✅ Manipuler les différentes fonctions PHP pour gérer les dates
- ✅ Connaître des fonctionnalités plus avancées (intervalles, périodicité)
Les dates, c'était pas mieux avant

Au temps jadis, les dates étaient gérées à partir du timestamp, c'est-à-dire le nombre de secondes depuis le 1er janvier 1970.
Cela fonctionnait très bien (et fonctionne toujours) et de nombreuses fonctions PHP ont été développées pour manipuler ce timestamp. Cependant, ce dernier a plusieurs limitations. Sa taille notamment, qui ne cesse de croître et qui trouverait une limite théorique à la date du 19 janvier 2038 (sur les systèmes codés en 32 Bits), ainsi que des lacunes dans la gestion des fuseaux horaires, d'heures d'été et d'hiver, etc.
Dans l'introduction de ce tutoriel, tu comprendras les problématiques liées aux dates (notamment les fuseaux horaires) et l'intérêt de l'apparition des classes dédiées aux dates.
Il est important de connaître les principales fonctions de dates historiques. Lis notamment les pages sur la fonction date(), getdate(), mktime(), strtotime().
PHP et les dates, maintenant, c'est la classe!

Pour pallier ces limitations sur les dates, une série de classes est apparue avec PHP 5.2/5.3 Ces classes permettent de manipuler les dates plus facilement, de manière plus avancée et en s'affranchissant notamment des problématiques de fuseaux horaires.
**Remarque:* note que PHP offre toujours la possibilité d'utiliser les fonctions historiques en plus des classes dédiées. Il te laisse donc le choix dans la fonction date !*
Ces classes sont au nombre de 5 :
-
DateTime qui permet d'instancier un objet date/heure et d'afficher une date au format souhaité. C'est la classe de base et celle que tu utiliseras le plus.
-
DateTimeImmutable par défaut, chaque manipulation d'un objet
DateTimemodifie l'objet lui-même. Si tu souhaites qu'une manipulation crée un nouvel objet au lieu de modifier l'existant, tu devras plutôt utiliserDateTimeImmutable. -
DateTimeZone qui permet de définir le fuseau horaire sur lequel tu souhaites travailler. Cet objet ne sera pas abordé en détail. Sache que, par défaut, il reprendra la timezone définie dans le fichier php.ini du serveur.
-
DateInterval qui permet de définir et manipuler un intervalle de temps.
-
DatePeriod qui permet de travailler sur une période de temps, et gérer par exemple les problématiques de récurrences.
Série de 9 vidéos courtes sur l'utilisation avancée des classes Date en PHP.
Où l'on creuse un peu plus l'utilisation des classes Date en POO.
💪 Challenge
Doc et Marty partent en voyage
C'est l'heure de voyager dans le temps. Doc et Marty montent dans la Delorean. Il faut configurer la date actuelle et la date de destination. La machine a besoin de connaître la durée qui sépare ces deux dates pour ajuster la quantité de carburant nécessaire. Attention, la moindre erreur pourrait rompre le continuum espace-temps !
-
Crée deux variables
$presentTimeet$destinationTime, qui seront des objetsDateTime.$presentTimedevra correspondre à la date actuelle (le moment du départ) et$destinationTimela date et heure de destination, choisis celle que tu veux. -
Affiche ensuite ces deux dates en suivant exactement le format de l'image ci-dessous

Tu n'es pas obligé de suivre le style (mais si tu veux faire un peu de CSS, rien ne t'en empêche), par contre il faut bien afficher, dans cet ordre, le mois, le jour, l'année, le moment de la journée (AM ou PM), l'heure et les minutes.
3. Affiche ensuite la durée qui sépare ces deux dates et formate le résultat pour qu'il affiche le nombre d'années, mois, jours, heures et minutes entre les deux dates.
[BONUS] : Calcule ensuite ce même intervalle, mais cette fois ci uniquement en nombre de minutes séparant les deux dates. Toutes les 10000 minutes, le réservoir a besoin d'un litre de carburant. Affiche donc le nombre de litres de carburant nécessaire pour effectuer ce trajet temporel.
Critères de validation
- Deux objets
DateTimesont instanciés - Les deux dates ("present time" et "destination time") sont affichées et correctement formatées. Si en plus il y a du CSS qui reproduit l'affichage du convertisseur spatio-temporel, tu peux chaleureusement féliciter ton camarade dans tes commentaires ;-) )
- L'intervalle de temps entre les deux dates est affiché et correctement formaté.
- [BONUS] : La quantité de carburant nécessaire au trajet s'affiche. N'hésite pas à modifier
$destinationTimepour vérifier que les données se mettent correctement à jour.
Ressources partagées sur cette quête
- Car les liens de la Wild ne m'ont pas suffit celuici je le trouve interessant https://www.gekkode.com/developpement/php-date-et-heure/