Date et timestamp unix avec PHP

Afin de bien appréhender la manipulation des dates en PHP, il est bien nécessaire de comprendre ce qu'est un timestamp unix.

Appelé aussi horodatage unix, le timestamp unix représente le nombre de secondes écoulées depuis le 1er janvier 1970 à minuit GMT. Cette date correspond au début de l'aire linux. En effet, les systèmes Unix enregistrent la date et l'heure courantes sous la forme d'un entier sur 32 bits.

Connaître le timestamp d'un moment donné va permettre de travailler avec pour obtenir toutes sortes d'informations : Vérifier la validité d'une date, classer des membres par ordre d'inscription, etc...

Connaitre le timestamp actuel : fonction time

Pour obtenir le timestamp actuel, il vous suffit d'utiliser la fonction time(). La fonction time() est la fonction qui retourne le temps écoulé depuis ce premier janvier 1970 jusqu'à maintenant.

Exemple d'utilisation de time :

<?php
echo "Il s'est écoulé ". time() . " secondes depuis le 1er Janvier 1970";
?>

Afficher le timestamp d'une date : fonction mktime

Pour convertir une date quelconque en nombre de secondes depuis le 1er Janvier 1970, on va avoir recours à la fonction mktime(). En tant que paramètre de la fonction on précise, l'heure, la minute, la seconde, le mois, le jour, l'année.

Exemple d'utilisation de mktime :

<?php
echo "Noël 2007, c'était il y a ". mktime(0,0,0,12,25,2007) . " secondes ";
?>

Afficher l'heure du serveur : fonction date

La fonction date() permet d'obtenir l'heure locale du serveur. Elle donne la date d'aujourd'hui. On peut lui passer comme argument des formats de date. Ainsi, elle va formater la date selon le format indiqué en argument.

Les arguments pouvant être employés sont nombreux mais en voici quelques exemples :

  • d - Jour du mois, sur deux chiffres (éventuellement avec un zéros) : "01" à "31"
  • D - Jour de la semaine, en trois lettres (et en anglais) : par exemple "Fri" (pour Vendredi)
  • F - Mois, textuel, version longue; en anglais, i.e. "January" (pour Janvier)
  • h - Heure, au format 12h, "01" à "12"
  • H - heure, au format 24h, "00" à "23"
  • g - Heure, au format 12h sans les zéros initiaux, "1" à "12"
  • G - Heure, au format 24h sans les zéros initiaux, "0" à "23"

La fonction getdate() quant à elle, renvoie un tableau associatif contenant les différentes parties du timestamp qu'on lui passe en paramètre. Si on ne lui passe pas de paramètre, elle retourne la date d'aujourd'hui.

Les champs du tableau sont les suivants :

  • "seconds" - secondes, numérique
  • "minutes" - minutes, numérique
  • "hours" - heures, numérique
  • "mday" - jour du mois, numérique
  • "wday" - jour de la semaine, numérique. 0: dimanche jusqu'à 6: samedi
  • "mon" - mois, numérique
  • "year" - année, numérique
  • "yday" - jour de l'année, numérique
  • "weekday" - jour de la semaine format plein texte; c'est à dire. "Monday"
  • "month" - mois, format plein texte; i.e. "April"

Contrôle de validité d'une date : fonction checkdate

La fonction checkdate() nous permet de s'assurer de la validité d'une date issue par exemple d'un formulaire. Elle se révèle particulièrement utile pour vérifier les dates saisies par l'utilisateur.

Ce qui nous permet d'éviter les 31 Février, 35 Décembre et autres erreurs.

La fonction vérifie d'abord si l'année est bien un entier compris entre 0 et 32767. Ensuite, elle vérifie si le mois est un entier compris entre 1 et 12. Et enfin, si le jour existe bien dans le mois en question. Sachant que la fonction tient compte des années bissextiles.

<?php
$mois = 12;
$jour = 35;
$annee = 2001;
if (checkdate($mois, $jour, $annee)) {
  echo "La date $jour/$mois/$annee est valide";
} else {
  echo "La date $jour/$mois/$annee est invalide";
}
?>

Affichage d'une date selon un format donné : fonction strftime

Pour afficher une date, on pourra utiliser la fonction strftime avec pour paramètre une chaîne de caractères indiquant le format sous lequel vous voulez représenter la date.

<?php
echo "Affichage au format jour/mois/annee heure:minute:seconde ".
strftime("%d/%m/%y %H:%M:%S")."<br />";
?>

Il est également possible de récupérer la date à la microseconde près en utilisant la fonction gettimeofday().

Exemple d'utilisation de gettimeofday

<?php
$tableau = gettimeofday();
echo "Il s'est écoulé ".$tableau['sec']." secondes et ".
$tableau['usec']." microsecondes depuis le 1er Janvier 1970.<br />";
?>

La fonction date() permet d'obtenir une date plus classique telle que nous la connaissons. La syntaxe est date (format [, timestamp])

Exemple 1 :

<?php
echo date ("d/m/Y H:i:s", 1207742661)
?>

Exemple 2 :

<?php
echo date (" d/m/Y", str(" 2008-10-09) ; /* affichage en format ISO/US d'un format français */
?>

Exemple 3 :

<?php
setlocale(LC_TIME, 'fr, FR','fr_FR@euro','fr','FR','fra_fra','fra');
echo "nous sommes le". strftime ("%A %d %B %Y et il est %Hh%M", 1207742661); /*affiche la date dans le local actuel */
?>

Exemple 4 :

<?php
$time=mktime(date('H'),date('i',date('s'),date('m')-8,date('d')-29,date('y')-5) ;
echo date(("d/m/Y H:i:s", $time);/*calcul de la d'il y a 5 ans et 8 mois et 29 jours*/
?>

Remarques :

  1. strftime() se décline en gmstrftime() qui affiche la date GMT à partir d'une date définie localement.
  2. La fonction date() a à peu près le même role que strftime() mais est moins complète et ne permet pas de clairement différencier le texte, proprement dit, des caractères "clés". Toutefois, les caractères "clés" diffèrent.
  3. date() se décline également en gmdate() qui affiche la date GMT à partir d'une date définie localement.

Une question ? Venez la poser sur notre forum développement web !

A propos de l'auteur

Nicolas Galle

Nicolas Galle est développeur web sénior pour l'agence Aseox.

Newsletter Marketing