Localisation
Le format de date et d'heure (format et langue) est dépendant de l'environnement d'exécution du code PHP. Généralement la plupart des serveurs web incorporant PHP sont configurés en langue anglaise avec une gestion des informations de localisation en anglais. Il peut être préférable de passer en français pour un site francophone ce qui simplifie largement la tâche. On peut effectuer cela avec la fonction « setlocale ». Voici deux exemples: un sous Windows NT/2000 et un autre sousLinux
<?php
if (substr(php_uname(), 0, 7) != "Windows") {
setlocale(LC_TIME,"fr_FR@euro");
} else {
setlocale(LC_TIME,"fr");
}
?>
Dans cet exemple, nous vérifions d'abord à quel système nous avons à faire (fonction php_uname) puis en fonction du résultat nous passons en localisation française selon deux méthodes. Après ce changement, les appels aux fonctions retournant des jours de la semaine ou des mois le feront en français.
Récupérer la date et l'heure
Le plus simple est d'utiliser la fonction « date » qui retourne l'heure locale sous forme d'une chaîne de caractères à préciser en premier paramètre. En second paramètre on peut préciser un « timestamp » si on ne souhaite pas l'heure actuelle. Pour récupérer la date du jour :
<?php
echo date("d/m/Y"); // 25/11/2015
?>
Voici les caractères utilisables (documentationPHP):
- a -"am"(matin) ou "pm"(après-midi)
- A -"AM"(matin) ou "PM" (après-midi)
- B - Heure Internet Swatch
- 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)
- g -Heure, au format 12h, sans les zéros initiauxi.e. "1"à"12"
- G -Heure, au format 24h, sans les zéros initiaux i.e. "0"à"23"
- h -Heure, au format 12h, "01"à"12"
- H -heure, au forma t24h, "00"à"23"
- i -Minutes;"00"à"59"
- I (imajuscule) -"1"si l'heure d'été est activée, "0"sil 'heure d'hiver .
- j -Jourdu mois sans les zéros initiaux:"1"à"31"
- l -('L'minuscule) - Jour de la semaine, textuel,version longue;en anglais,i.e. "Friday"(pour Vendredi)
- L -Booléen pour savoir si l'année est bissextile("1") ou pas("0")
- m -Mois;i.e. "01"à"12"
- M -Mois,en trois lettres (et en anglais) :par exemple "Apr"(pour Avril)
- n -Mois sans les zéros initiaux; i.e. "1"à"12"
- O -Différence d'heures avec l'heure de Greenwich, exprimée en heures;i.e. "+0200"
- r -Format de date RFC822; i.e. "Thu, 21 Dec2000 16:01:07+0200"(ajouté en PHP4.0.4)
- s -Secondes;i.e. "00"à"59"
- S - Suffixe ordinal d'un nombre, en anglais, sur deux lettres:i.e. "th", "nd"
- t -Nombre de jours dans le mois donné, i.e. "28"à"31"
- T - Fuseau horaire de la machine; i.e. "MET"
- U -Secondes depuis une époque
- w -Jour de la semaine, numérique, i.e. "0"(Dimanche) to"6"(Samedi)
- W -Numéro de semaine dans l'année ISO-8601 :les semaines commencent le lundi (ajoutéen PHP4.1.0)
- Y -Année, 4 chiffres;i.e. "1999"
- y -Année, 2 chiffres;i.e. "99"
- z -Jour de l'année; i.e. "0"à"365"
- Z -Décalage horaire en secondes(i.e. "-43200"à"43200")
Tout autre caractère peut être employé et ne sera pas interprété. Si vous désirez employer l'un de ces caractères, il faut le verrouiller avec un antislash. ATTENTION AVEC CETTE FONCTION LE RESULTAT EST EN ANGLAIS.
On peut récupérer le timestamp actuel avec la fonction « time ». La commande suivante a la même effet que la précédente:
<?php
echo date("d/m/Y", time()); // 25/11/2015
?>
Pour formater le résultat en local (pour tenir compte de la localisation) il faut utiliser la fonction « strftime » qui tient compte de la langue. On aura donc un résultat en français. Le premier paramètre est la chaîne de formatage.Le second est un éventuel timestamp.
- %a -nom abrégé du jour de la semaine(local).
- %A -nom complet du jour de la semaine(local).
- %b -nom abrégé du mois(local).
- %B -nom complet du mois(local).
- %c -représentation préférée pour les dates et heures, en local.
- %C -numéro desiècle(l'année, diviséepar 100 etarrondieentre00 et99) %d -jour du moisennumérique(intervalle01 à31)
- %D -identique à %m/%d/%y
- %e -numéro du jour du mois.Les chiffres sont précédés d'un espace(de'1'à'31')
- %h -identique à %b
- %H -heure de la journée en numérique, et sur 24-heures(intervalle de 00 à23)
- %I -heure de la journée en numérique, et sur 12- heures(intervalle01 à12)
- %j -jour de l'année, en numérique(intervalle 001 à 366)
- %m- mois en numérique(intervalle1 à12)
- %M -minute en numérique
- %n -newline character
- %p -soit`am' ou `pm' en fonction de l'heure absolue, ou en fonction des valeurs enregistrées en local.
- %r - l'heure au format a.m. et p.m.
- %R -l'heure au format 24h
- %S -secondes en numérique
- %t - tabulation
- %T -l'heure actuelle(égal à %H:%M:%S)
- %u -le numéro de jour dans la semaine, de 1 à 7. (1 représente Lundi)
- %U -numéro de semaine dans l'année, en considérant le premier dimanche de l'année comme le premier jour de la première semaine.
- %V -le numéro de semaine comme défini dans l'ISO8601:1988, sous forme décimale, de01 à 53. La semaine1 est la première semaine qui a plus de jours dans l'année courante, et dont Lundi est le premier jour.
- %W -numéro de semaine dans l'année, en considérant le premier lundi de l'année comme le premier jour de la première semaine
- %w -jour de la semaine, numérique, avec Dimanche=0
- %x -format préféré de représentation de la date sans l'heure
- %X -format préféré de représentation de l'heure sans la date
- %y -l'année, numérique, sur deux chiffres(de 00 à 99)
- %Y -l'année, numérique, sur quatre chiffres
- %Z -fuseau horaire, ou nom ou abréviation
- %% - un caractère'%' littéral
-
Retour par tableau getdate()
La fonction « getdate » permet aussi de récupérer la date et l'heure actuels (avec éventuellement un timestamp en paramètre) mais sous forme de tableau indexé selon les valeurs suivantes:
- "seconds"- secondes
- "minutes" -minutes
- "hours" -heures
- "mday" -jour du mois
- "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;i.e. "299"
- "weekday" - jour de la semaine, texte complet(en anglais);i.e. "Friday"
- "month" - mois,texte complet(en anglais);i.e. "January"
<?php
$aujourdhui = getdate();
$mois = $aujourdhui['month'];
$mjour = $aujourdhui['mday'];
$annee = $aujourdhui['year'];
echo "$mjour/$mois/$annee";
?>
Pour l'heure on peut utiliser les fonctions « localtime » qui peut aussi prendre un paramètre timestamp et qui retourne un tableau indexé selon les valeurs suivantes;
- "tm_sec" -secondes
- "tm_min" -minutes
- "tm_hour" -heure
- "tm_mday" -jour du mois
- "tm_mon" -mois de l'année
- "tm_year" -Année, incompatiblean 2000
- "tm_wday" -Jour de la semaine
- "tm_yday" -Jour de l'année
- "tm_isdst" -Est-ce que l'heure d'hiver a pris effet?
Récupérer n'importe quelle date
On peut récupérer n'importe quelle date en timestamp ou en chaîne. On peut pour cela utiliser la fonction « strtotime ». Elle prend comme paramètre une chaîne de texte en anglais qu'elle essaie de convertir en timestamp. Voici quelques exemples.
<?php
echo strtotime("now"); // timestamp actuel
echo strtotime("-1 day"); // hier
echo strtotime("+1 day"); // demain
echo strtotime("11 september 2001"); // Le 11 septembre 2001
echo strtotime("+1 year +2 weeks +3 days"); // dans 1 an 2 semaines 3 jours
?>