Comme nous venons de le voirs, le traitement des dates et du temps repose sur l'utilisation du nombre de secondes écoulées depuis le 01/01/1970. Ce nombre sert de base à toutes les fonctions traitant des dates et qui permettent d'extraire les informations pertinentes : année, mois, jour, heures, minutes, secondes, semaine, nom du jour, numéro du jour dans l'année, année bissextile ou non, etc.

La fonction mktime()

Définir une date revient à déterminer son timestamp. Pour cela PHP nous fournit la fonction mktime() qui accepte en paramètres, dans l'ordre suivant, heures, minutes, secondes, mois, jour et année de la date choisie.

Exemple : définir une date

L'exemple suivant calcule le timestamp de votre date de naissance et affiche le nom du jour où vous êtes né.

Exemple : définir une date

Définir une date future ou passée

Nous pouvons obtenir une date passée ou une date future en utilisant les fonctions mktime() et getdate() ou date().

L'exemple suivant calcule à quelle date nous serons dans 45 jours et 18 heures.

Exemple : définir une date dans le futur

Ce qui est agréable, c'est que la fonction mktime() fait automatiquement les bons calculs de mois et d'heures avec les arguments qu'on lui passe.

Dans l'exemple précédent nous commençons par récupérer les éléments constituant la date du jour avec la fonction getdate() qui comme nous l'avons vu précédemment renvoie un tableau de ces divers constituants. Par exemple $j['mday'] contient le numéro du jour actuel et $j['hours'] contient l'heure du moment.
Pour calculer la date future dans 45 jours, il nous suffit d'ajouter 45 au jour actuel : $j['mday'] + 45.
Même chose pour calculer la date dans 18 heures, il suffit d'ajouter 18 à l'heure actuelle : $j['hours'] + 18.
Pour récupérer le timestamp de la date dans 45 jours et 18 heures, il suffit donc de passer les paramètres suivant à la fonction mktime() :
mktime($j['hours'] + 18, $j['minutes'], $j['seconds'], $j['mon'], $j['mday'] + 45, $j['year']);

Nous pourrions aussi utiliser la fonction date() à la place de getdate() :
mktime(date('H') + 18, date('i'), date('s'), date('m'), date('d') + 45, date('Y'));
Cette solution, si elle est identique en terme de résultat, est par contre beaucoup plus consommatrice en temps de traitement car la fonction date() est appelée 6 fois de suite.

Le même principe peut être utilisé pour calculer une date passée. L'exemple suivant calcule la date d'il y a 1 an, 6 mois et 3 jours.

Exemple : définir une date dans le passé

Exercice : fonction d'ajout de temps

PHP ne fournit pas directement une fonction qui permette d'ajouter ou de retrancher un certain laps de temps à une date. Vous allez donc écrire la fonction newTimestamp() qui retroune un timestamp par ajout ou soustraction.

La fonction accepte trois paramètres :

Le type du temps à ajouter est un caractère alphabétique qui peut avoir les valeurs suivantes:

a
: pour un nombre d'années
t
: pour un nombre de trimestres
m
: pour un nombre de mois
j
: pour un nombre de jours
w
: pour un nombre de semaines
h
: pour un nombre d'heures
i
: pour un nombre de minutes
s
: pour un nombre de secondes.

La fonction newTimestamp() renvoie un timestamp.

Une solution possible

Exercice : fonction d'ajout de temps

Exercice : fonction de différence de temps

Avec le principe du timestamp, il est très facile de calculer la différence de temps entre 2 dates. Ecrivez la fonction getTimeDiff() qui permet de calculer le laps de temps écoulé entre 2 dates. La fonction accepte trois paramètres :

Le type du temps retourné est un caractère alphabétique qui peut avoir les valeurs suivantes:

j
: pour un nombre de jours
w
: pour un nombre de semaines
h
: pour un nombre d'heures
i
: pour un nombre de minutes
s
: pour un nombre de secondes.

Si la fonction est appelée avec seulement 2 paramètres, c'est le timestamp de la date du jour qui est utilisé comme date de fin.

La fonction getTimeDiff() renvoie le nombre d'unités inférieure le plus proche (floor()).

Une solution possible

Exercice : fonction de différence de temps