Quoi d'nuuf ?
Certains ont peut être vu passé brievement mon debut d'article sur les templates Joomla! Il sera de retour trés bientot !
 
Articles les plus lus
Derniers articles
Download
SW Menu Free
OpenSEF 2.0.0 RC5
Jogadget 0.4
gko_neurologeek v0.6

1.6. Date et heure

Version imprimable Suggérer par mail
23-03-2007
phpLes 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 :

date("format");


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 :

24-03-2007


... 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 :

24@03@2007


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 :

24/03/2007 à 11H37mn

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 :

$date = date();


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 :

time();


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 :

1174738703


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 :

253499435


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 :

921242000


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



 
< Précédent   Suivant >