0%
savoir image

Dans ce savoir nous allons voir comment bien gérer les dates en PHP. Lorsque je recherche du code sur les problèmes d'heure et de date rencontrés par les développeurs, j'ai remarqué que beaucoup de gens utilisent encore les anciennes fonctions PHP telles que date(), time() ou strtotime(). Que diriez-vous d'utiliser la classe DateTime à la place ?

 

DateTime peut effectuer toutes les opérations habituelles de date et d'heure que vous pourriez demander, et même plus. L'utilisation DateTime peut faire gagner beaucoup de temps lorsque vous devez effectuer des opérations simples ou plus complexes sur les dates.

Pourquoi utiliser DateTime au lieu d'un tas de fonctions de date PHP ?

Voici pourquoi:

  • DateTime est plus robuste à utiliser. Moins de bug, c'est toujours mieux.
  • DateTime est une classe. Vous pouvez utiliser la composition pour modifier facilement son comportement. Vous avez toujours besoin de la même date en entrée pour vos tests unitaires ? Utilisez votre propre instance DateTime qui renvoie toujours l'anniversaire de votre chien !
  • L'utilisation d'une classe est plus facile à comprendre pour vos collègues développeurs. Même s'ils ne le savent pas DateTime, ils n'ont qu'à consulter la documentation d'une seule classe. C'est certainement mieux que de chercher un tas de fonctions indépendantes.

 

Instanciation et formatage DateTime

<?php

$dateTime = new DateTime('2016-01-01');
echo $dateTime->format('Y-m-d H:i:s');

Sortie : 2016-01-01 00:00:00

 

<?php

$dateTime = new DateTime();
echo $dateTime->format('Y-m-d H:i:s');

Sortie : quelle que soit la date actuelle, correctement formatée.

 

DateTime et Timestamps

<?php

$dateTime = new DateTime();
$dateTime->setTimestamp(1271802325);
echo $dateTime->format('Y-m-d H:i:s');

Sortie : 2010-04-20 22:25:25

 

<?php

$dateTime = new DateTime('2016-05-20');
echo $dateTime->getTimestamp();

Sortie : 1271802325

 

Ajouter ou soustraire du temps

<?php

$dateTime = new DateTime('2016-01-01');
$dateTime->modify('+1 day');
echo $dateTime->format('Y-m-d H:i:s');

Sortie : 2016-01-02 00:00:00

 

<?php

$dateTime = new DateTime('+1d');
echo $dateTime->format('Y-m-d H:i:s');

Sortie : Afficher la date actuelle plus un jour.

 

Intervalle entre deux dates

<?php

$datetime1 = new DateTime('2009-10-11 12:12:00');
$datetime2 = new DateTime('2009-10-13 10:12:00');

$interval = $datetime1->diff($datetime2);
echo $interval->format('%Y-%m-%d %H:%i:%s');

Sortie : 00-0-1 22:0:0

Dans cet exemple, nous avons créé deux DateTime objets. Ils recevront deux dates différentes dans leurs constructeurs.

Afin de comparer ces deux dates, nous utilisons la méthode diff() du premier DateTime objet avec le deuxième DateTime objet comme argument.

La diff() méthode renverra un nouvel objet de type DateInterval. Si vous voulez formater la différence entre les deux dates, vous pouvez aussi utiliser la format() méthode de la classe DateIntervalmais attention : elle n'acceptera pas le même formatage que la DateTime::format() méthode.

 

Comparer les DateTimes

<?php

$datetime1 = new DateTime('2009-10-11 12:12:00');
$datetime2 = new DateTime('2009-10-13 10:12:00');

if ($datetime1 > $datetime2) {
    echo 'datetime1 greater than datetime2';
}

if ($datetime1 < $datetime2) {
    echo 'datetime1 lesser than datetime2';
}

if ($datetime1 == $datetime2) {
    echo 'datetime2 is equal than datetime1';
}

Sortie : datetime1 lesser than datetime2

 

Vous êtes maintenant un maître de DateTime !

 

Je vous invite à lire la documentation PHP sur la classe DateTime. Vous n'aurez jamais à vous soucier de plusieurs fonctions et vous simplifierez considérablement votre code.

 

0 commentaires