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.
L'exemple suivant calcule le timestamp de votre date de
naissance et affiche le nom du jour où vous êtes né.
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.
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.
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 laps de temps
- le type du temps à ajouter / retrancher
- le timestamp de la date à laquelle nous voulons
ajouter/retrancher le temps.
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 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é
- le timestamp de la date de début
- le timestamp de la date de fin.
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