PHP - MySQL [Retour au menu]
Gestion des dates

Dates et heures

Gestion de la date du jour

C'est la fonction date() qui permet de récupérer la date du jour. Admettons que nous soyions le 10 juin 2009 :

echo date("d/m/y");
10/06/09

Lettres utiles et courantes

Année

y - Année sur 2 chiffres
Y - Année sur 4 chiffres
L - L'année est-elle bissextile ? Oui : 1, Non : 0.

Mois

m - Mois, pourvu du 0 non significatif (de 01 à 12)
n - Mois, non pourvu du 0 non significatif (de 1 à 12)
t - Nombre de jours du mois (de 28 à 31)

Semaine

D - Nom du jour de la semaine, sur 3 lettres, en anglais (mon, tue, wed, thi, fri, sat, sun)
w - Numéro du jour de la semaine de 0 (Dimanche) - à 6 (Samedi)

Jour

d - Jour du mois, pourvu de l'éventuel 0 non significatif (de 01 à 31)
j - Jour du mois, non pourvu du 0 non significatif (1 à 31)
z - Numéro du jour de l'année (de 0 à 366)

Heure

G - Heure, au format 24h, non pourvu du 0 non significatif (de 0 à 23)
H - Heure, au format 24h, pourvu du 0 non significatif (de 00 à 23)
O - Différence d'heures avec l'heure de Greenwich, exprimée en heures. Par exemple : "+0200"

Minute

i - Minutes, pourvues du 0 non significatif (de 00 à 59)

Seconde

s - Secondes, pourvues du 0 non significatif (de 00 à 59)
U - Nombre de secondes écoulées depuis le premier janvier 1970

Autre

r - Format de date RFC 822. Par exemple : Thu, 10 Jun 2009 14:20:51 +0200

Moins intéressant

Les lettres qui suivent me paraissent moins intéressantes (ou je n'ai pas bien compris leur utilité)

Il est très possible d'attribuer une valeur de date à une variable et de faire des calculs dessus :

$Annee = date("y");
$Annee = $Annee + 1;
echo "$Annee"; //2010

TimeStamp

Le TimeStamp représente le nombre de secondes écoulées depuis le premier janvier 1970. Pour donner un ordre d'idées, à 30 ans et 8 mois environ, vous fêtez votre milliardième seconde de vie sur cette terre. En d'autre mot, si nous étions en août 2000, le Timestamp serait de 1 milliard environ.

On peut obtenir ce TimeStamp depuis la fonction mktime. mktime accepte comme paramètre dans cet ordre précis :

mktime (Heures, Minutes, Secondes, Mois, Jour, Année)

Ainsi, si on écrit :

echo mktime (0, 0, 0, 8, 1, 2000); //1er août 2000, minuit

ça donne :

965'080'800

Soit un peu plus de 965 millions de secondes, et donc presque un milliard. Ce qui est particulièrement intéressant avec cette fonction, c'est que vous pouvez installer des paramètres qui peuvent paraître étranges au premier abord : On s'attend à ce que cette ligne plante :

echo mktime (0, 0, 0, 49, 1, 2000);

Puisqu'on demande le nombre de secondes écoulées jusqu'au 1.49.2000 (soit le 49ème mois de l'année 2000), mais il renvoie correctement :

1'072'911'600

Et ce qu'on pourrait consirérer comme un "bug" va finalement nous faciliter la vie. Par exemple, imaginons que nous voulions récupérer une date en avance de 3 mois sur la date actuelle : admettons que nous soyons le 8.11.2002 : avec le TimeStamp de mktime, nous n'allons pas nous casser la tête à essayer de voir s'il intervient un changement d'année : Nous allons bêtement demander le 14ème mois de l'année 2002, qu'il va sagement transformer en février 2003, sans broncher.

Nous avons vu plus haut la fonction date avec des paramètres de formatage. Pour reccueillir le mois actuel, nous écririons :

date("m")

Si nous sommes en novembre, ça affichera 11.. Si nous demandons :

echo date("m")+3;

Il va donc renvoyer 14. C'est donc ce chiffre que nous allons stocker :

echo mktime(0 , 0 , 0 , date("m")+3 , date("d") , date("Y"));

Va vonc nous renvoyer le nombre de secondes entre le 1.1.1970 et le 8.14.2002 - ou plutôt en fait le 8.2.2003. Et le plus fort vient maintenant : Nous allons REconvertir ce nombre de secondes en date "normale", grâce à la précieuse fonction date qui accepte donc 2 paramètres : Le format, et un TimeStamp :

echo date("d.m.Y" , mktime(0,0,0,date("m")+3,date("d"),date("Y")));

qui va afficher

8.2.2003

Obtenir un TimeStamp aisément avec strtotime

strtotime va nous permettre d'obtenir un TimeStamp de manière bien pratique. Admettions que nous voulions la date moins une semaine a partir du 31 décembre 2010 (31 - 7 = 24 décembre 2010) :

echo date("D d F Y, H:i:s", strtotime("31.12.2010 -1week"));
Fri 24 December 2010, 00:00:00

Voici quelques exemples :

strtotime("now") // Aujourd'hui
strtotime("10 September 2000") // 10 septembre 2000
strtotime("1.2.2000") // 1er février (et pas le 2 janvier)
strtotime("+1 day") // Demain
strtotime("1 day") // Demain
strtotime("-2 day") // Avant-hier
strtotime("1.1.2010 +2week") // 15 janvier 2010
strtotime("31.1.2010 +1 month") // 3 mars 2010 (et pas 28 février)
strtotime("31.12.2010 -1week +1day") // - 1 semaine + 1 jour = - 6 jours (25 décembre)

Vérification de l'expiration d'une période d'essai

$FinValidite=strtotime("1.6.2010");
$Maintenant=strtotime(now);
if ($FinValidite<$Maintenant)
echo "Période expirée"; else
echo "Période OK";

Fonction permettant l'affichage en français convivial

La fonction accepte une date en format pas très convivial (par exemple 2010-06-30), et renvoie Mercredi 30 juin 2010 :

echo DateConviviale(date(r)); // r est l'affichage à la norme RFC 822 (Sat, 12 Jun 2010 13:48:05 +0200) Mais la date peut être donnée avec un format moins strict
Samedi 12 Juin 2010
function DateConviviale($QuelleDate)
{
$NomJour = date("D", strtotime($QuelleDate));
$Jour = date("j", strtotime($QuelleDate));
$NomMois = date("M", strtotime($QuelleDate));
$Annee = date("Y", strtotime($QuelleDate));

// Nom du jour en toutes lettres :
switch ($NomJour) {
case "Mon": $NomJour = "Lundi"; break;
case "Tue": $NomJour = "Mardi"; break;
case "Wed": $NomJour = "Mercredi"; break;
case "Thu": $NomJour = "Jeudi"; break;
case "Fri": $NomJour = "Vendredi"; break;
case "Sat": $NomJour = "Samedi"; break;
case "Sun": $NomJour = "Dimanche"; break;
}
// Nom du mois en toutes lettres :
switch ($NomMois) {
case "Jan": $NomMois = "Janvier"; break;
case "Feb": $NomMois = "Février"; break;
case "Mar": $NomMois = "Mars"; break;
case "Apr": $NomMois = "Avril"; break;
case "May": $NomMois = "Mai"; break;
case "Jun": $NomMois = "Juin"; break;
case "Jul": $NomMois = "Juillet"; break;
case "Aug": $NomMois = "Août"; break;
case "Sep": $NomMois = "Septembre"; break;
case "Oct": $NomMois = "Octobre"; break;
case "Nov": $NomMois = "Novembre"; break;
case "Dec": $NomMois = "Décembre"; break;
}

return $NomJour." ".$Jour." ".$NomMois." ".$Annee;
}

Récupération de la date de dernière modification d'un fichier

filemtime renvoie le TimeStamp de la dernière modification d'un fichier.

Soit un fichier MonTexte.txt se trouvant dans le dossier courant :

echo (filemtime("MonTexte.txt")); // 1028983194
echo date("r", filemtime("apprendphp.php")); // Sat, 12 Jun 2010 13:59:36 +0200