Développeur d'applications WEB
PHP

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:
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") ]]]]]] )
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.

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.