Les Tutos de Gabriel

Les dates en Français

Formatage des dates et heures

Avant-propos

Cette page est basée sur la démo vidéo de PrimFx

Affichage de base :

1 - Pour afficher une date en Php, écrivez :
<?php
$datedujour = date('d m Y');
echo '<p>Date du jour : '.$datedujour.'</p>';
?>

Résultat :

Date du jour : 12 08 2020

Commentaires :

La fonction "date()" demande de mettre entre les parenthèses, le format dans lequel on veut afficher la date.

Nous allons donc poser quelques exemples :

FormulesAffichagesCommentaires
1date('Y m d')2020 08 12Forme courte en Anglais
2date('d m Y')12 08 2020Forme courte en Français
3date('l d F Y')Wednesday 12 August 2020Forme longue en Anglais
4date('j-m-Y')12-08-2020Forme courte en Français avec tirets
5date('j/m/Y')12/08/2020Forme courte en Français avec "/"
6date('j/m/Y Hh i\' s"')12/08/2020 1402 11' 31"Forme sans caractère d'échappement "\"
7date('j/m/Y H\h i\' s"')12/08/2020 14h 11' 31"Forme avec caractère d'échappement "\"

Problème :

La ligne 3 nous pose le problème de la langue Anglaise pour le jour de la semaine et le mois, en s'affichant : Wednesday 12 August 2020.

Je vous propose une solution qui sera acceptée par toutes les anciennes versions des navigateurs (Windows 7 incluse).
Je pars du principe que vous avez un fichier "config.php" valable pour toutes les pages de votre site.

2 - Écrivez les lignes suivantes dans ce fichier :
$aujourdhui= date('j m Y') ;
$jour = date("d");
$joursemaine = date("w");
$mois = date("m");
$annee = date("Y");
$heure = date("H");
$minute = date("i");
$seconde = date("s");
$j = array('','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi','Dimanche');
$m = array('','Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août', 'Septembre','Octobre','Novembre','Décembre');
$moment = time(); /* nombre entier de secondes depuis le 1er janvier 1970 jusqu'à ce matin 0 heure.
Si vous rafraîchissez la page, vous verrez que ce nombre aura augmenté du nombre de secondes écoulée.*/

$cejour = $today = $j[$joursemaine].' '.$jour.'-'.$m[$mois].'-'.$annee ;

3 - Écrivez ensuite dans votre page, là oùvous voulez placer votre date très longue, par exemple :
<p class="souligne">Aujourd'hui nous sommes le : <?= $cejour ?></p>

Vous obtiendrez le résultat ci-dessous :

Aujourd'hui nous sommes le : , il est 14 h, 11' 31"

Remarques :

Chaque fois que vous "rafraîchissez" votre page, la date et l'heure changent, puisque nous utilisons ici la fonction "date()".
Bien entendu, ce ne sera pas le cas lorsque vous utiliserez ces formules sur une date d'inscription ou autre récupérée dans une base de données.

Dans la ligne 6, l'attribut "H" majuscule donne l'heure sur la base de 24h, l'attribut "h" donne la même heure sur la base de 12h. Ce qui provoque une erreur d'affichage.
Pour résoudre ce problème, on utilise donc, dans la ligne 7, le caractère d'échappement "\".
En mettant "H\h" on obtient "18h", si on met "h\h", on obtiendra "06h".

Le principe est le même pour les minutes et secondes.

Page à consulter :

Pour voir toutes les possibilités offertes par Php, vous pouvez voir la page spéciale :
http://php.net/manual/fr/function.date.php

Autres solutions :

Toujours dans les pages du manuel Php, vous pouvez prendre la page http://php.net/manual/fr/function.strftime.php

La fonction "strftime()" va vous permettre de placer directement vos dates dans le format de la langue choisie, dans notre cas, en français.

Exemple :

Nous allons récupérer, dans la table sommaire, la date de création de cette page.

4 - Écrivez les formules suivantes :
$dateCreation = $bdd->prepare('SELECT Dates FROM sommaire WHERE Fichier = ?');
$dateCreation->execute(array('cours2045'));
$dateCreation = $dateCreation->fetch()['Dates'];

5 - Continuez avec les lignes suivantes :
setlocale(LC_TIME, 'fr_FR','French');
echo strftime('Le jour de la semaine est : "%A" ou en abrégé : "%a" ');
echo '<br />';
echo time();
echo '<br />';
echo strftime('%A %d %B %Y',strtotime($dateCreation));

Résultats :

1 - Le jour de la semaine est : "mercredi" ou en abrégé : "mer."
2 - 1511650800 secondes depuis le 1er Janvier 1970.
3 - dimanche 26 novembre 2017

Explications :

On a commencé en indiquant le format "Français" par la commande
"setlocale(LC_TIME, 'fr_FR','French');"

En ligne 1, on prend un premier exemple avec le jour de la semaine où vous lisez cette page.

En ligne 2, la commande "time()" donne en "secondes" le temps écoulé depuis le 1er Janvier 1970 à 0h 0' 0" jusqu'au moment où vous lisez cette page.

En ligne 3, on utilise donc la formule "strftime" qui a besoin de 2 arguments : le format, la date "$dateCreation" que l'on veut traiter.
Cette date, qui figurait dans la bdd au format Anglais, "Année Mois Jour" est transformée au préalable en milliards de secondes, par la fonction "strtotime()".

Remarque :

En ligne 3 on voit que le jour et le mois ne sont pas écrits avec une majuscule. Je vous donne donc une formule trouvée sur PrimFx :

6 - Formule avec majuscules :
/*a*/$resultat = ucfirst(strftime('%A %d&nbsp;',strtotime($dateCreation)));
/*b*/$resultat .= ucfirst(strftime('%B %Y',strtotime($dateCreation)));
/*c*/echo '<p>'.$resultat.'</p>';

Résultat :

Dimanche 26 Novembre 2017

Explications :

En ligne "a", on traite seulement le jour de la semaine "%A" et la date du jour "%d".
On fait suivre immédiatement par un espace insécable "$nbsp;".
On traite cet ensemble par la commande "ucfirst()" qui met en Majuscule le premier caractère de la chaîne.

En ligne "b", on traite ensuite le mois "%B" et l'année "%Y".
On traite également par la commnde "ucfirst()" pour mettre une majuscule au mois.
On concatène cette ligne avec la précédente.

En ligne "c", on affiche le résultat.