|
23-03-2007 |
Les dates et heures sont très souvent un composant important d'un programme php. Ils peuvent par exemple vous aider a savoir quand à était passée une commande, depuis quand tel utilisateur ne s'est pas connecté à votre site, restreindre le temps d'accès à certaines parties de votre site etc etc...
Voyons comment php gère le temps.
Formation de date avec date() :
Pour former une date, dans la majorité des cas vous utiliserai la fonction "date()". C'est la fonction la plus simple à utiliser et la plus commode pour obtenir une date au format souhaité.
La plupart du temps la fonction date prendra cette forme :
Ou "format" peut prendre un totale de 18 options différentes. En effet la fonction date() peut afficher au choix une date, une heure ou bien les deux. Ces options se présentent sous la forme de lettres ayant chacune un signification. Par exemple la lettre "d" (en minuscule) retournera le jour courant du mois sur 2 chiffres précédée d'un zéro. La lettre "D" (en majuscule) retournera l'abréviation du jour courant de la semaine en anglais. Exemple :
<?php echo date('j-m-Y'); ?> |
Affichera :
... pour le peu que la date du jour soit le 23 Mars 2007 ;) Noter que les symboles de séparation sont au choix de l'utilisateur. S'il vous prend l'envie de séparer les éléments de votre date par des @ (ou n'importe quoi d'autre), pas de problème :
<?php
echo date('j@m@Y');
?> |
Affichera bien :
Pour plus d'informations sur les options de date et heure de la focntion date(), rendez-vous sur la page de documentation de php.net relative à la fonction date() : http://www.php.net/manual/fr/function.date.php
Si vous voulez former une date en y incluant des caractères, par exemple pour utiliser une seul fonction date() pour former un date ayant ce format "jj/mm/aaaa à hhHmn" vous devrais faire précéder les caractères supplémentaire d'un "\". Un exemple :
<?php echo date('j/m/Y \à G\Hi\m\n'); ?> |
Affichera :
Manipulation de date avec php :Tour d'abord sachez d'une date peut parfaitement être stockée dans une variable de la manière suivante :
L'inconvenant
de la fonction date() est qu'elle à la fâcheuse tendance à ne retourner
que la date ou heure du moment présent et sous des formats variées voir
exotique... pas vraiment pratique si vous voulez faire des calculs avec
des dates ! Si vous n'utiliser que la fonction date() vous risquez de
vous retrouver souvent avec un résultat nul ou incorrect !
Pour faire des calculs avec les dates sous php nous préférerons utiliser
les fonctions mktime() et time(). Ces 2 fonctions utilise comme origine
le timestamp Unix. Vous allez voir cela parait complexe mais c'est en
faite très pratique :
- time() ne prend pas d'argument, elle s'utilise directement sous cette forme :
Elle
retourne le nombre de seconde écoulées à l'instant actuel t depuis le
temps Unix (1er janvier 1970 à 00:00:00 GMT). Par exemple :
<?php $instant_t=time(); echo "$instant_t"; ?> |
Affichera quelque chose comme :
Ce résultat représente le nombre de seconde écoulées à l'instant ou a était lut
le script depuis le 1er janvier 1970 à 00:00:00 GMT. La réponse
retournées changera chaque fois que vous rechargerais le script.
-
mktime() permet de calculer le nombre de seconde écoulées depuis le temps
Unix pour une date spécifique, elle prend cette forme :
| mktime(h, m, s, M, J, A); |
Ou
h = heures sur 24heures précédées d'un zéro, m = minutes précédées d'un
zéro, s = secondes précédées d'un zéro, M = mois de l'année précédés
d'un zéro, A = année sur 4 chiffres. ATTENTION cette ordre doit être
respecté, vous n'avez pas le choix la dessus. Noter également que la
date est inscrite à l'anglo-saxonne c'est a dire le mois de l'année précède le jour du mois. Par exemple :
<?php $today=mktime(01, 30, 35, 01, 13, 1978); echo"$today"; ?> |
Affichera :
Ce resultat représente le nombre de seconde écoulées entre le 1er janiver
1970 à 00:00:00 GMT et le 13 janvier 1978 01:30:35. Cette valeur ne
changera pas si vous recharger le script !
Ce n'est pas très
clair ? Pas grave, nous allons faire un exercice qui permet à tous le
monde de comprendre : vous avez décidé d'utiliser php pour savoir
combien de secondes ce sont écoulées entre la date du jour et votre
date de naissance. Il va falloir déclaré un timestamp qui
correspond à votre date d'anniversaire puis le stocker dans une
variable. Ensuite il va falloir obtenir la date du jour et la stocker
également dans une variable. Pour finir vous allez soustraire la date
du jour à votre timestamp et afficher le résultat pour savoir combien
de seconde ce sont écoulées depuis votre naissance. Voila comment cela se
présente :
<?php
$anniv=mktime(01, 30, 35, 01, 13, 1978);
$today=time();
$secondes="$today"-"$annvf";
echo "$secondes";
?> |
Affichera quelques chose comme :
Qui est le nombre de secondes écoulées entre la date du jour et le date de votre naissance.
Pour aller un peu plus loin : Nous allons rendre le nombre de secondes
plus lisible et nous allons convertir ce résultat en heures puis en
jours puis en années. Pour formater le nombre de secondes nous
utiliserons la fonction number_format(), pour plus d'informations sur
cette fonction rendez-vous à cette page : http://www.php.net/manual/fr/function.number-format.php
Voila ce que cela donne :
<?php
$anniv=mktime(01, 30, 35, 01, 13, 1978);
$today=time();
$secondes="$today"-"$anniv";
$heures="$secondes"/3600;
$annee="$heures"/8760;
$secondes_format=number_format($secondes, 0, "."," ");
$heures_format=number_format($heures, 2, "."," ");
$annee_format=number_format($annee, 1, "."," ");
echo "$secondes_format secondes soit ";
echo "$heures_format heures soit ";
echo "$annee_format années";
?> |
Ce qui affichera :
|
921 242 825 secondes soit 255 900.78 heures soit 29.2 années |
|