logo oujood
🔍

PHP : Maîtriser la fonction date() pour le formatage des dates et heures

Découvrez comment utiliser efficacement la fonction date() en PHP pour afficher et formater des dates personnalisées, convertir des timestamps Unix et manipuler les fuseaux horaires avec des exemples concrets et détaillés.

OUJOOD.COM

PHP cours tutorial

Définition et présentation de la fonction date() en PHP

Version PHP compatible : 4+
Évolutions importantes :
PHP 5.1.0 : Ajout des messages d'erreur de fuseau horaire E_STRICT et E_NOTICE. Extension de la plage de validité de l'horodatage entre le vendredi 13 décembre 1901 20:45:54 GMT et le mardi 19 janvier 2038 03:14:07 GMT. Avant PHP 5.1.0, l'horodatage était limité du 01-01-1970 au 19-01-2038 sur certains systèmes d'exploitation comme Windows.
PHP 5.1.1 : Ajout des constantes prédéfinies pour les formats de date/heure standards (DATE_RFC822, DATE_ATOM, DATE_ISO8601, etc.) utilisables directement dans le paramètre format pour simplifier le formatage des dates selon les normes internationales.

La fonction date() en PHP constitue l'outil fondamental pour formater et afficher des dates et heures locales sous forme de chaîne de caractères personnalisée. Cette fonction native permet de convertir un timestamp Unix (nombre de secondes écoulées depuis le 1er janvier 1970 00:00:00 GMT) en une représentation lisible et formatée selon vos besoins spécifiques.

Le fonctionnement de date() repose sur deux paramètres essentiels : le format de sortie souhaité et optionnellement un horodatage timestamp. Lorsque le paramètre timestamp est fourni, la fonction l'utilise pour générer la date correspondante. Si aucun timestamp n'est spécifié, date() utilise automatiquement l'heure système actuelle via la fonction time(), ce qui en fait un choix idéal pour afficher la date et l'heure courantes sur vos pages web dynamiques.

Syntaxe complète de la fonction date() en PHP

La syntaxe pour utiliser la fonction date() et formater une date en PHP est la suivante :

string date(string $format [, int $timestamp = time()])

Cette fonction PHP de manipulation des dates accepte deux paramètres distincts :

  • $format (obligatoire) : chaîne définissant le format de sortie souhaité
  • $timestamp (facultatif) : horodatage Unix entier représentant la date à formater

Paramètres détaillés de la fonction date() : guide complet du formatage

ParamètreDescription technique et utilisation
formatRequis. Spécifie le format de sortie de la date en utilisant des caractères spéciaux. Cette chaîne de formatage peut combiner plusieurs identifiants pour créer des formats personnalisés adaptés à vos besoins d'affichage.

Options de formatage du jour :
  • d - Jour du mois sur deux chiffres avec zéro initial (01 à 31) - idéal pour les formats standards
  • D - Représentation textuelle abrégée du jour en trois lettres (Mon, Tue, Wed, Thu, Fri, Sat, Sun)
  • j - Jour du mois sans zéro initial (1 à 31) - format court pour affichage compact
  • l (« L » minuscule) - Nom complet du jour de la semaine en toutes lettres (Monday, Tuesday, etc.)
  • N - Représentation numérique ISO-8601 du jour (1 pour lundi jusqu'à 7 pour dimanche)
  • S - Suffixe ordinal anglais pour le jour (st, nd, rd ou th) - s'utilise avec j pour "1st, 2nd, 3rd"
  • w - Représentation numérique du jour (0 pour dimanche jusqu'à 6 pour samedi)
  • z - Jour de l'année (de 0 à 365) - utile pour les calculs de différence entre dates
Options de formatage de la semaine :
  • W - Numéro de semaine ISO-8601 de l'année (semaines commençant le lundi) - de 01 à 53
Options de formatage du mois :
  • F - Nom complet du mois en toutes lettres (January, February, March, etc.)
  • m - Représentation numérique du mois avec zéro initial (01 à 12)
  • M - Nom abrégé du mois en trois lettres (Jan, Feb, Mar, etc.)
  • n - Représentation numérique du mois sans zéro initial (1 à 12)
  • t - Nombre de jours dans le mois spécifié (28, 29, 30 ou 31) - très utile pour la validation
Options de formatage de l'année :
  • L - Indicateur d'année bissextile (1 si année bissextile, 0 sinon) - essentiel pour les calculs calendaires
  • o - Numéro d'année au format ISO-8601 - peut différer de Y en début/fin d'année
  • Y - Année complète sur quatre chiffres (ex: 2024) - format standard recommandé
  • y - Année abrégée sur deux chiffres (ex: 24) - format court
Options de formatage de l'heure :
  • a - Indicateur ante/post meridiem en minuscules (am ou pm)
  • A - Indicateur ante/post meridiem en majuscules (AM ou PM)
  • B - Temps Internet Swatch (000 à 999) - fuseau horaire décimal rarement utilisé
  • g - Heure au format 12 heures sans zéro initial (1 à 12)
  • G - Heure au format 24 heures sans zéro initial (0 à 23)
  • h - Heure au format 12 heures avec zéro initial (01 à 12)
  • H - Heure au format 24 heures avec zéro initial (00 à 23) - format international standard
  • i - Minutes avec zéro initial (00 à 59)
  • s - Secondes avec zéro initial (00 à 59)
  • u - Microsecondes (ajouté en PHP 5.2.2) - pour les timestamps de haute précision
Options de formatage du fuseau horaire :
  • e - Identifiant du fuseau horaire (exemples : UTC, Europe/Paris, America/New_York)
  • I (i majuscule) - Indicateur d'heure d'été (1 si heure d'été active, 0 sinon)
  • O - Décalage horaire par rapport à GMT en heures et minutes (ex: +0200, -0500)
  • P - Décalage horaire par rapport à GMT avec séparateur deux-points (ex: +02:00)
  • T - Abréviation du fuseau horaire système (exemples : EST, MDT, CET)
  • Z - Décalage du fuseau horaire en secondes (-43200 à 50400) - négatif à l'ouest, positif à l'est de l'UTC
Formats complets prédéfinis :
  • c - Date au format ISO-8601 complet (ex: 2024-02-12T15:19:21+00:00)
  • r - Date au format RFC 2822 (ex: Thu, 21 Dec 2000 16:01:07 +0200)
  • U - Timestamp Unix en secondes depuis l'époque (1er janvier 1970 00:00:00 GMT)
timestampFacultatif. Le paramètre timestamp représente un horodatage Unix de type entier correspondant au nombre de secondes écoulées depuis l'époque Unix (1er janvier 1970 00:00:00 GMT). Si ce paramètre n'est pas fourni, la fonction date() utilise automatiquement l'heure système courante via time(), ce qui équivaut à appeler date($format, time()). Ce paramètre vous permet de formater des dates historiques ou futures en fournissant le timestamp correspondant, obtenu par exemple via mktime(), strtotime() ou depuis une base de données.

Exemples pratiques d'utilisation de la fonction date() en PHP

Voici des exemples concrets et commentés pour comprendre comment afficher et formater des dates en PHP avec différentes combinaisons de paramètres et constantes prédéfinies.

Exemple :    📋 Copier le code

<?php
// Configuration du fuseau horaire par défaut (obligatoire depuis PHP 5.1)
// Définit UTC comme référence temporelle - peut être changé selon votre localisation
date_default_timezone_set('UTC');

// Affichage du nom complet du jour actuel en anglais
// Résultat possible : Monday, Tuesday, Wednesday, etc.
echo date("l") . '<br>';

// Format complet avec jour, date ordinale, mois, année et heure 12h
// Résultat : Monday 8th of August 2005 03:12:46 PM
// Note : \o\f permet d'afficher "of" littéralement en échappant les caractères
echo date('l jS \of F Y h:i:s A') . '<br>';

// Formatage d'une date spécifique avec mktime()
// mktime(heure, minute, seconde, mois, jour, année) crée un timestamp
// Ici : 1er juillet 2000 à 00:00:00 - Résultat : July 1, 2000 is on a Saturday
echo 'July 1, 2000 is on a ' . date("l", mktime(0, 0, 0, 7, 1, 2000)) . '<br>';

// Utilisation des constantes prédéfinies pour les formats standards
// DATE_RFC822 : format email standard (ex: Mon, 15 Aug 2005 15:12:46 UTC)
echo date(DATE_RFC822) . '<br>';

// DATE_ATOM : format ISO-8601 pour flux RSS/Atom et APIs
// Résultat : 2000-07-01T00:00:00+00:00 (parfait pour l'interopérabilité)
echo date(DATE_ATOM, mktime(0, 0, 0, 7, 1, 2000));
?>

L'exemple ci-dessus va afficher :

Wednesday
Wednesday 11th of March 2026 01:43:41 PM
July 1, 2000 is on a Saturday
Wed, 11 Mar 26 13:43:41 +0000
2000-07-01T00:00:00+00:00


Protection et échappement des caractères dans la fonction date()

Lorsque vous souhaitez afficher des caractères littéraux dans votre format de date, il est essentiel de les protéger avec un antislash (\) pour éviter qu'ils ne soient interprétés comme des identifiants de format. Cette technique d'échappement permet d'inclure du texte personnalisé dans vos dates formatées. Si le caractère à afficher est lui-même un antislash, vous devrez le doubler (\\) pour l'échapper correctement.

Exemple d'échappement de caractères dans date()

Exemple :    📋 Copier le code

<?php
// Échappement des caractères pour afficher "the" littéralement
// \\t devient \t (échappement de l'antislash)
// \h et \e sont échappés pour afficher "he"
// Résultat : "Monday the 8th" au lieu d'interpréter t, h, e comme formats
echo date("l \\t\h\\e jS");
?>

L'exemple ci-dessus va afficher :

Wednesday the 11th

Voici maintenant des exemples avancés de formatage avec date() démontrant l'importance de l'échappement. Vous devriez systématiquement échapper tous les caractères qui ne sont pas des identifiants de format, car même s'ils n'ont pas de signification actuellement, les futures versions de PHP pourraient leur en attribuer une, ce qui causerait des effets indésirables dans votre code.

Important : Notez aussi que les versions futures de PHP peuvent attribuer une signification à des lettres actuellement neutres. Lorsque vous échappez des caractères, privilégiez l'utilisation de guillemets simples plutôt que doubles pour éviter que les séquences comme \n ne soient interprétées comme des retours à la ligne par PHP avant même d'atteindre la fonction date().

Exemples complets de formatage de dates personnalisées

Exemple :    📋 Copier le code

<?php
// Contexte simulé : 12 Mars 2001, 17:16:18, Fuseau horaire Mountain Standard Time (MST)
// Ces exemples montrent différentes combinaisons de formatage pour divers besoins

// Format long lisible : "March 12, 2001, 5:16 pm"
// F=mois complet, j=jour sans zéro, Y=année 4 chiffres, g=heure 12h, i=minutes, a=am/pm
echo date("F j, Y, g:i a") . '<br />';

// Format américain court : "03.12.01" (mois.jour.année sur 2 chiffres)
echo date("m.d.y") . '<br />';

// Format numérique simple : "12, 3, 2001" (jour, mois sans zéro, année)
echo date("j, n, Y") . '<br />';

// Format compact sans séparateur : "20010312" - utile pour noms de fichiers
// Format YYYYMMDD facilite le tri chronologique
echo date("Ymd") . '<br />';

// Format avec texte intégré : "05-16-18, 12-03-01, it is 1 Day"
// h=heure 12h avec zéro, w=jour de semaine (0-6), texte libre mélangé
echo date('h-i-s, j-m-y, it is w Day') . '<br />';

// Démonstration d'échappement complexe : "it is the 12th day."
// Chaque lettre de "it is the" et "day" est échappée individuellement
echo date('\i\t \i\s \t\h\e jS \d\a\y.') . '<br />';

// Format serveur/log : "Mon Mar 12 17:16:18 MST 2001"
// D=jour court, M=mois court, G=heure 24h, T=timezone abrégé
echo date("D M j G:i:s T Y") . '<br />';

// Phrase en français avec échappement : "17:03:18 m est le mois"
// Notez que 'm' non échappé affiche le mois (03), le reste est échappé
echo date('H:m:s \m \e\s\t\ \l\e\ \m\o\i\s') . '<br />';

// Format heure simple 24h : "17:16:18" - format international standard
echo date("H:i:s");
?>

L'exemple ci-dessus va afficher :

March 11, 2026, 1:43 pm
03.11.26
11, 3, 2026
20260311
01-43-41, 11-03-26, 4331 4341 3 Wedpm26
it is the 11th day.
Wed Mar 11 13:43:41 UTC 2026
13:03:41 m est le mois
13:43:41

Note importante sur la localisation : Les noms des jours et des mois retournés par date() sont en anglais par défaut. Pour afficher les noms de jours et de mois en français ou dans une autre langue, vous devrez utiliser des techniques complémentaires comme setlocale() combiné avec strftime(), ou créer vos propres tableaux de traduction. Consultez notre exemple pratique : afficher les jours et mois en français pour une solution complète de localisation des dates.

Ressources complémentaires pour la manipulation des dates en PHP

Pour approfondir vos connaissances sur la gestion et le formatage des dates en PHP, consultez également :

Référence complète des fonctions de date et heure de PHP

Par carabde | Mis à jour le 11 March 2026