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");
y - Année sur 2 chiffres
Y - Année sur 4 chiffres
L - L'année est-elle bissextile ? Oui : 1, Non : 0.
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)
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)
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)
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"
i - Minutes, pourvues du 0 non significatif (de 00 à 59)
s - Secondes, pourvues du 0 non significatif (de 00 à 59)
U - Nombre de secondes écoulées depuis le premier janvier 1970
r - Format de date RFC 822. Par exemple : Thu, 10 Jun 2009 14:20:51 +0200
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
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 :
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 :
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
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")
);
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)
$FinValidite=strtotime("1.6.2010");
$Maintenant=strtotime(now);
if ($FinValidite<$Maintenant)
echo "Période expirée";
else
echo "Période OK";
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
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;
}
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