Le timestamp unix
Pour bien appréhender la gestion des dates en PHP, il est nécessaire de comprendre ce qu’est un timestamp unix. Le timestamp unix représente le nombre de secondes écoulées depuis le 1er janvier 1970 à minuit GMT.
Trés bien, mais à quoi ça sert, me direz vous. Connaître le timestamp d’un moment donné va vous 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…
Obtenir un timestamp
Pour obtenir le timestamp actuel, il vous suffit d’utiliser la fonction time().
La fonction time() ne prend aucun argument et retourne la date courante en secondes depuis le 1er janvier 1970.
<?php
echo time(); // Affichera 1063911060
?>
Cela veut dire qu’il s’est écoulé 1063911060 secondes entre le 1er janvier 1970 à minuit GMT et le 18 septembre 2003 à 18:51:00 GMT.
Intéressons nous maintenant à la fonction mktime().
La fonction mktime retourne, pour une date donnée, le timestamp lui correspondant.
int mktime ( int hour, int minute, int second, int month, int day, int year [, int is_dst])
Le dernier argument est optionnel et peut être mis à 1 si l’heure d’hiver s’applique, 0 dans le cas contraire, et -1 si on ne sait pas (valeur par défaut).
Exemple d’utilisation de mktime() :
<?php
// Secondes écoulées entre le 1er janvier 1970 et le 27 mai 2002 à midi
echo mktime(12, 0, 0, 5, 27, 2002); Affichera 1022493600
?>
Note : Faites bien attention à l’ordre des arguments sous peine de vous retrouver avec un timestamp incorrect.
Note : Vous pouvez aussi utiliser la fonction gmmktime() qui est équivalente mais considère la date que vous lui donnez comme une date GMT.
Obtenir une date
La fonction sans conteste la plus utilisée est la fonction date(). En voici la définition :
string date ( string format [, int timestamp])
Le premier argument représente le format de la date. Plusieurs caractères sont possibles pour spécifier le format. En voici quelques uns (extrait de la doc officielle) :
- d – Jour du mois, sur deux chiffres (éventuellement avec un zéro) : « 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 24h, « 00 » à « 23 »
- i – Minutes; « 00 » à « 59 »
- j – Jour du mois sans les zéros initiaux: « 1 » à « 31 »
- m – Mois; i.e. « 01 » à « 12 »
- M – Mois, en trois lettres (et en anglais) : par exemple « Apr » (pour Avril)
- s – Secondes; i.e. « 00 » à « 59 »
- Y – Année, 4 chiffres; i.e. « 1999 »
Le deuxième argument, optionnel, est un timestamp unix, par défaut, le timestamp actuel est utilisé.
Quelques exemples :
<?php
echo date('d m Y H:i'); // affichera 18 09 2003 20:21
/*
* Pour utiliser un caractère du format comme un caractère normal,
* vous devez l'échapper avec un backslashe (\)
*/
echo date('H\Hi'); // affichera 20H21
// Les deux exemples suivants sont équivalents,
// ils afficheront 18 September 2003
echo date('d F Y');
echo date('d F Y', time());
?>
Note : La fonction gmdate() est identique en tout point à la fonction date() à ceci près qu’elle retourne une date GMT.
Vérifier la validité d’une date
Pour vérifier si une date donnée est valide (une date fournie par un formulaire par exemple), vous pouvez utiliser la fonction checkdate().
La fonction checkdate() vérifie si la date donnée est valide, si c’est le cas, la fonction retourne true, false dans le cas inverse.
int checkdate ( int month, int day, int year)
Exemple d’utilisation :
<?php
$result = checkdate(13, 10, 2002);
if( $result == true )
{
echo 'la date est valide';
}
else
{
echo 'la date n\'est pas valide';
}
?>
Note : Pour être considérée comme valide, la date doit remplir les conditions suivantes (extrait de la doc officielle) :
- L’année doit être comprise entre 1 et 32767
- Le mois doit être compris entre 1 et 12
- Le jour doit être compris dans l’intervalle de jours du mois donné (les années bissextile sont prises en compte)
Afficher la date PHP en français
Affichage d’une date en français avec date() et getdate()
<?php
// Date en français
$jour = getdate();
print_r(getdate());
$semaine = array(" Dimanche "," Lundi "," Mardi "," Mercredi "," Jeudi ",
" vendredi "," samedi ");
$mois =array(1=>" janvier "," février "," mars "," avril "," mai "," juin ",
" juillet "," août "," septembre "," octobre "," novembre "," décembre ");
// Avec getdate()
echo "Français : Avec getdate() : Aujourd'hui ", $semaine[$jour['wday']]
,$jour['mday'], $mois[$jour['mon']], $jour['year'],"
";
// Avec date()
echo "Français : Avec date() : Aujourd'hui ",
$semaine[date('w')] ," ",date('j'),"", $mois[date('n')], date('Y'),"
";
?>
Affichage d’une date en français avec strftime()
Pour afficher la date du jour en français avec PHP, il faut procéder ainsi :
- Définir les informations de localisation avec la fonction
setlocale
. - Définir le décalage horaire par défaut avec la fonction
date_default_timezone_set
. - Utiliser la fonction
strftime
pour formater la date avec la configuration locale. - Éventuellement utiliser
utf8_encode
pour gérer les problèmes d’accentuation.
Exemple :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
...
<?php
setlocale(LC_TIME, 'fr_FR');
date_default_timezone_set('Europe/Paris');
echo utf8_encode(strftime('%A %d %B %Y, %H:%M'));
?>