Gestion des dates en PHP
La fonction date() permet de réaliser toutes les opérations voulues sur des données temporelles. Elle propose beaucoup d'options et on l'utilisera en association avec d'autres fonctions proches.
Pour plus de détails, voir la fiche d
'utilisation de la fonction date.
Récupération des paramètres de la date actuelle
Il suffit de transmettre à la fonction un format donné sous forme de chaîne de caractères (i.e. entrourés de guillemets ou d'apostrophes/
quotes ).
Si l'on veut récupérer la date sous forme "Française", c'est à dire jj/mm/aaaa, on va chercher dans la fiche d
'utilisation de la fonction date les caractères nécessaire pour élaborer le format:
- Pour le jour, on choisira le caractère d, car on le veut affiché sur deux caractères.
- Pour le mois, on choisira le caractère m pour les mêmes raisons.
- Pour l'année, on choisira le caractère Y afin de l'obtenir sur 4 caractères.
La valeur de retour de la fonction est une chaîne de caractères que l'on pourra afficher par exemple.
<?php
$Maintenant=date("d/m/Y");
echo "Nous sommes le $Maintenant";
?>
Ce qui donnera à l'exécution:
Nous sommes le 02/11/2025
Récupération des paramètres d'un autre instant
Le timestamp
La traduction du timestamp pourrait être "marqueur temporel".
Pour pouvoir faire des opérations sur les dates (comme calculer un nombre de jour séparant deux dates), il est nécessaire que ces dates soient repérées dans un système numérique. C'est le principe de l'horodatage.
Un timestamp va donc désigner un compteur numérique représentant une quantité de temps écoulée depuis un instant de référence, compatible avec le système de l'heure Unix.
L'instant de référence correspond au 01/01/1970 à 00:00:00 GMT.
On peut donc avec ce sytème obtenir des paramètres d'une date passée ou future.
La fonction mktime()
Cette fonction va justement nous permettre d'obtenir le timestamp correspondant à une date donnée.
Prototype :
int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") ]]]]]] )
- Les paramètres à fournir à la fonction sont (dans l'ordre): Heures, Minutes, Secondes, Mois, Jour, Année.
- Les arguments peuvent être omis, de droite à gauche, et tous les arguments manquants sont utilisés avec la valeur courante de l'heure et du jour.
- La fonction renvoie un entier qui est le timstamp correspondant.
- Plus de détail sur la fonction mktime
Exemple d'utilisation:
Admettons que l'on veuille connaître le timestamp du 01/01/2000 à 12:00:00.
On va donc écrire le code:
<?php
$Timestamp=mktime(12,0,0,1,1,2000);
?>
Ce qui donnera à l'exécution:
946724400
Le nombre obtenu est le nombre de seconde depuis la référence UNIX.
Ce timestamp va ensuite être utilisé avec la fonction date() pour afficher une information qui sera beaucoup plus parlante pour l'utilisateur.
Utilisation avec la fonction date()
Dans ce cas, on utilise le deuxième paramètre (qui est optionnel) en lui transmettant Le timestamp précédemment calculé.
On va chercher à savoir quel jour de la semaine était le 01/01/2000:
<?php
$Timestamp=mktime(12,0,0,1,1,2000);
$jour=date("D", $Timestamp);
echo "Le 01/01/2000 était un $jour";
?>
Ce qui donnera à l'exécution:
Le 01/01/2000 était un Sat
On obtient le nom du jour de la semaine, mais en anglais.
Pour remédier à ce problème et l'afficher en Français, on pourra utiliser le format
"N" qui nous donnera le numéro du jour de la semaine.
Il suffit alors d'utiliser un tableau contenant les noms des jours de la semaine en Français:
<?php
$Timestamp=mktime(12,0,0,1,1,2000);
$jour=date("N", $Timestamp);
$NomJour=array("Lundi","Mardi","Mercredi","Jeudi", "Vendredi",
"Samedi","Dimanche");
$jour=$NomJour[$jour-1];
echo "Le 01/01/2000 était un $jour";
?>
Ce qui donnera à l'exécution:
Le 01/01/2000 était un Samedi
Le format "N" fournit la représentation numérique ISO-8601 du jour de la semaine.
Le nombre obtenu est codé de 1 (pour Lundi) à 7 (pour Dimanche).
Si on veut l'utiliser avec un tableau dont les indices vont de 0 à 6, il faut soustraire une unité.
Conversions
On sera souvent amené à devoir convertir les dates entre le format Français que nous utilisons et le système US qui est nativement implanté sur les systèmes informatiques.
Du système Français vers le système US
<?php
function conv_date_us($d)
{
list($jour,$mois,$annee)=explode('/',$d);
return date('Y-m-d',mktime(0,0,0,$mois,$jour,$annee));
}
?>
La fonction
explode va permettre de supprimer les "/". Elle retourne une collection de variables qui vont être agglomérées par la fonction
list.
ensuite la date à l’aide de la fonction mktime.
- La fonction explode:
array explode ( string $delimiter , string $string [, int $limit ] )
Coupe une chaîne en segments: Retourne un tableau de chaînes, chacune d'elle étant une sous-chaîne du paramètre stringextraite en utilisant le séparateur delimiter.
- La fonction list:
void list ( mixed $varname [, mixed $... ] )
Transforme une liste de variables en tableau: Tout comme array(), list() n'est pas une véritable fonction, mais un élément de langage qui permet de rassembler les variables sous forme de tableau, pour les assigner en une seule ligne.
Du système US vers le système Français
On pourra utiliser cette fonction:
<?php
function convertirDateUSToFR($d)
{
return date("d/m/Y", strtotime($d));
}
?>
On utilise la fonction
strtotime qui convertit une date exprimée en système US en un timestamp.