La gestion des dates et de l’heure en PHP n’est pas très complexe, mais il y a plusieurs façons différentes de faire et beaucoup d’options. Nous allons voir cela ensemble.

 

Avant de commencer, n’oubliez pas que si vous rencontrez des difficultés, vous pouvez vous faire accompagner par un développeur PHP en déposant une annonce sur Codeur.com pour vous aider à développer votre site internet !

 

Déposez gratuitement votre projet sur Codeur.com, recevez une quinzaine de devis et sélectionnez le développeur web idéal.

Trouver un développeur web

Fonctionnement des dates et heures en PHP

Tout comme un nombre, une chaîne de caractère, un tableau ou un objet, est une donnée enregistrée dans la mémoire et que l’on peut utiliser dans une variable.

Cependant, pour optimiser la mémoire justement, une variable de type date n’est pas un objet qui contient chaque composante qui constitue la date (année, mois, jour, heure, etc). Non, la date enregistrée dans la mémoire n’est rien d’autre qu’un nombre. Et plus exactement, le nombre de secondes qui se sont écoulés depuis l’heure UNIX.

L’heure UNIX, ou « Système UNIX » est la date définie et figée à partir : le 1ᵉʳ Janvier 1970. Cette date a été désignée pour deux raisons : avoir une date pas trop éloignée des premiers ordinateurs capable de stocker des dates afin d’optimiser la valeur ; avoir une date facile à retenir.

Par exemple, la valeur Unix du 1ᵉʳ Janvier 2022 est 1640995200. Il s’agit donc du nombre de secondes écoulées depuis 1970.

Ce nombre de secondes depuis l’heure UNIX s’appelle également le « timestamp ». Ce terme apparaîtra à plusieurs reprises dans le tutoriel.

 

Récupérer la date et l’heure actuelle en PHP

Récupérer la date actuellement avec PHP est très simple, il suffit tout simplement d’utiliser la fonction time.

La fonction time() permet de récupérer le nombre de secondes depuis l’heure UNIX jusqu’à l’heure actuelle, appelé également « timestamp ».

$dt = time();
var_dump( $dt );
echo "Depuis le 1<sup>er</sup&gt; janvier 1970 il s'est écoulé exactement {$dt} secondes.";

 

Afficher la date et l’heure en PHP avec la fonction date

Maintenant que nous savons comment récupérer une date et une heure en PHP, on va maintenant pouvoir l’afficher. En effet, afficher le résultat de la fonction time() n’est pas ce qu’il y a de plus glamour pour les utilisateurs de votre site internet.

Pour afficher la date de l’heure de façon très simple, nous pouvons utiliser une fonction de base de PHP : date. Cette fonction comprend deux paramètres : le format (obligatoire) et le timestamp (facultatif).

Le format

Le format de la date et de l’heure est une chaîne de caractère où chaque caractère correspond à une donnée à afficher.

Par exemple, la lettre « H » indique l’heure au format 24h. Voici les caractères les plus utilisés, triés par données à afficher (les exemples se baseront sur le jeudi 07 avril 2022 à 08h00) :

  • Année :
    • Y les 4 chiffres (ex: 2022) ;
    • y les deux 2 derniers chiffres (ex: 22) ;
    • L pour savoir s’il s’agit d’une année bissextile (ex: 0).
  • Mois :
    • m le numéro avec le zéro initial (ex: 04) ;
    • n e numéro sans le 0 initial (ex: 4) ;
    • M les trois premières lettres du mois en anglais (ex: Apr) ;
    • F mois anglais en toutes lettres (ex: April) ;
    • L nombre de jours dans le mois (ex: 30).
  • Jour :
    • d numéro avec le zéro initial (ex: 07) ;
    • j numéro sans le zéro initial (ex: 7) ;
    • N numéro du jour de la semaine avec 1 pour lundi (ex: 4)
  • Heure :
    • H numéro format 24h avec le zéro initial (ex: 08) ;
    • h numéro format 12h avec le zéro initial (ex: 8) ;
  • Minutes :
    • i numéro avec le zéro initial (ex: 00).
  • Secondes :
    • s numéro avec le zéro initial (ex: 00).

Exemples d’utilisation :

  • Afficher la date et l’heure en français : d/m/Y H:i:s ;
  • Afficher la date et l’heure en anglais : D jS F H:i:s A ;
  • Afficher la date et l’heure en format base de données : Y-m-d H:i:s.

Utiliser un timestamp

Si l’on ne renseigne pas de second paramètre dans la fonction date(), c’est l’heure de l’exécution du script qui sera prise en compte.

Mais admettons que l’on souhaite afficher une date antérieure ou postérieure, une date fixe ; comme par exemple la date d’une commande passée par l’utilisateur ou un événement à venir. Pour ce faire, rien de plus simple, il suffit d’indiquer le timestamp de l’heure que l’on souhaite afficher. Exemple, si on veut afficher le 07 avril 2022 à 08h00, voici son timestamp : 1649318400.

$dt = 1649318400;
echo date( "d/m/Y H:i:s", $dt );
// => 07/04/2022 08:00:00

Petit exercice : voici un événement avec son timestamp. Utilisez la fonction date() pour afficher la date qui correspond à l’événement :

  1. Début des Jeux Olympiques Paris 2024 : 1721980800 ;
  2. Effondrement des tours jumelles : 1000202340 ;
  3. Date de naissance de l’auteur (bande de curieux) : 776167440.

 

Utiliser la classe DateTime pour manipuler une date en PHP

Cette partie du tutoriel demande d’avoir des notions de « Programmation Orientée Objet » car on va utiliser une classe : DateTime.

Les formats de données utilisées ici sont les mêmes que pour la fonction date. Voir le tableau.

Créer une date

Il y a des méthodes pour créer une date, ou plutôt une instance de DateTime.

Méthode 1 : L’heure actuelle

On va tout simplement créer une instance de la classe DateTime. Elle contiendra l’heure de l’exécution du script.

$dt = new \DateTime();

Méthode 2 : A partir d’une date existante

Il est possible de créer une date time à partir d’une autre date sous forme de caractère. En plus, il est plus nécessaire d’avoir son timestamp ! Il faut juste décomposer le format de la date entrante. Pour cela on va utiliser la méthode statique createFromFormat.

$date = "2022-04-07 08:00:00";
$dt = \DateTime::createFromFormat( "Y-m-d H:i:s", $date );

Afficher la date

Pour afficher une date avec la classe PHP DateTime, rien de plus simple. On va utiliser sa méthode format.

$dt = new \DateTime();
echo $date->format('d/m/Y H:i:s');

Modifier une date

Là encore, la classeDateTime est vraiment très puissante. Elle permet de modifier très facilement une date. Pour faire, on va utiliser la méthode modify.

Là où cette fonction est vraiment incroyable, c’est que l’on peut écrire une phrase en anglais pour modifier la date. Voici une série d’exemples.

// Demain même heure
$dt = new \DateTime();
$dt->modify("+1 day");
echo $dt->format('d/m/Y H:i:s') ."
";

// Demain à minuit
$dt = new \DateTime();
$dt->modify("+1 day");
$dt->modify("midnight");
echo $dt->format('d/m/Y H:i:s') ."
";

// premier jour du mois
$dt = new \DateTime();
$dt->modify("first day of this month");
echo $dt->format('d/m/Y H:i:s') ."
";

// dernier jour du mois
$dt = new \DateTime();
$dt->modify("last day of this month");
echo $dt->format('d/m/Y H:i:s') ."
";

// premier jour du mois dans 3 mois
$dt = new \DateTime();
$dt->modify("+3 months");
$dt->modify("first day of this month");
echo $dt->format('d/m/Y H:i:s') ."
";

// Prochain vendredi
$dt = new \DateTime();
$dt->modify("next friday");
echo $dt->format('d/m/Y H:i:s') ."
";

 

TP : Le prochain vendredi 13

Voici un petit exercice de travaux pratique pour vous exercer à utiliser les dates en PHP.

Le but est tout simplement de détecter le prochain vendredi 13 et le marque sous le format « d/m/Y ». À vos marques, prêt, partez !

Réponse :

<?php // Prochain vendredi $dt = new \DateTime(); $dt->modify('next friday');

// Tant que le jour enregistré n'est pas le 13
while( $dt->format('d') != 13 ) {
    // Passage au vendredi suivant
    $dt->modify('next friday');
}

// Affichage de la date enregistrée
echo $dt->format('d/m/Y');

 

Notre astuce pour afficher la date et l’heure en PHP

Nous avons vu comment gérer et afficher la date et l’heure en PHP grâce à la fonction date et la classe DateTime.

Petit hic, toutes les méthodes vues permettent d’afficher les jours et le mois en anglais seulement. Pour traduire cela, il y a deux méthodes. Une rapide, mais ni optimisée ni propre, qui consiste à faire une traduction manuelle via des Array ou l’usage de str_replace. La seconde, bien plus propre, mais surtout plus complexe, propose l’utilisation de la classe IntlDateFormatter qui a son fonctionnement propre et son prore format.

Si vous n’êtes pas à l’aise avec le PHP très avancé, nous vous recommandons de faire appel à un professionnel pour aller plus loin dans la gestion de vos dates. Pourquoi ne pas poster une annonce pour trouver un développeur freelance spécialisé en PHP ? Déposez gratuitement une annonce sur Codeur.com !