09
Juin
2002

Gestion des dates en PHP

2 - La manipulation de timestamps

Maintenant que vous savez afficher l'heure courante sous différentes manières, il pourrait être intéressant de pouvoir manipuler ces timestamps pour afficher autre chose que l'heure qu'il est.

Tout à l'heure, nous avons vu que PHP avait une fonction nommée mktime(). Revoici son fonctionnement :

<?

    $timestamp 
mktime(int heureint minuteint secondeint moisint jour,
                                     
int année, [int heure_hiver]);
?>

Comme mktime() s'attend à avoir des arguments Integer, rien ne nous empêche de lui passer une fonction date() comme argument :

<?php
     $timestamp 
mktimedate('H'), date('i'), date('s'), date('m'),
                                       
date('d'), date('Y')  );
?>

Bon, c'est un début, mais ce petit bout de code nous retourne toujours le timestamp de l'heure en cours...
L'avantage de l'utilisation de date() est que cela nous fait introduire des variables dans le mktime().
Rien ne nous empêche de rajouter des expressions mathématiques dans le mktime pour calculer le timestamp du 1er du mois dernier à 00h00 :

<?php
     $timestamp 
mktime000date('m') - 1,
                                       
1date('Y')  );
?>

Ainsi donc, dans l'exemple précédent, on a rajouté un -1 sur le date('m'), ce qui nous permet de passer en paramètre ( le mois en cours - 1 ).
Une petite application concrète pour conclure cette article : afficher les noms et dates des 5 derniers jours à partir d'aujourd'hui :

<?php
   
### Définitions des mois et jours
   
$monthes = array('''Janvier''Février''Mars''Avril''Mai''Juin''Juillet',
                              
'Août''Septembre''Octobre''Novembre''Décembre');
   
$days = array('Dimanche''Lundi''Mardi''Mercredi''Jeudi''Vendredi''Samedi');

   for (
$i 1$i <= 5$i++) {
     
$timestamp mktime(000date('m'), (date('d') - $i), date('Y')  );
     
$date_first $days[date('w'$timestamp)];
     
$date_second $monthes[date('n'$timestamp)];
     echo 
'J - '.$i.' : '.$date_first.' '.date('d'$timestamp).' ';
     echo 
$date_second.' '.date('Y'$timestamp).'<BR>';
   }
?>

Résultat :

J - 1 : Mercredi 13 Septembre 2006 J - 2 : Mardi 12 Septembre 2006 J - 3 : Lundi 11 Septembre 2006 J - 4 : Dimanche 10 Septembre 2006 J - 5 : Samedi 09 Septembre 2006

Pas trop dur non ?

Allez, à vous !

Posté par Mathieu LESNIAK à 15:12 dans la catégorie Articles | RSS catégorie
Tag(s) associé(s) :
Partager cet article : Ajouter en favori sur KreuZZPoster cet article sur ScoopeoPoster cet article sur FuzzPoster cet article sur diggAjouter en favori sur Del.icio.usPoster cet article sur reddit
Erianor
09/06/02 21:44:44

Dommage que tu n'es pas écrit cette article il y a un mois. Il m'aurait évité quelques heures de prise de tête. Bravo car je trouve ça très clair. Je ne peux que vous encourager à continuer.

Sansnom
10/07/02 02:55:23

Quel est votre scrit de blog ? Celui que vous utilisez sur le site ?! ;-p) Si ce n'est pas indiscret ... !

maverick
10/07/02 18:25:05

Script de blog ? de koi tu parles ?

bonatoc
28/09/02 20:01:48

Un petit ajout pour gérer les "1" de chaque mois... ;-)

<?php    $monthes = array('', 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet',                             'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');    $days = array('Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi');    $date_first = $days[date('w')];    $date_second = $monthes[date('n')]; $day_nr = date('d'); if ($day_nr == 1) {$day_nr = ("$day_nr"."er");}    echo $date_first.' '.$day_nr.' '.$date_second.' '.date('Y'); ?>

Kevbrok
05/04/04 18:08:46

Pas mal comme article ;)

Mais ya moyen de transformer le Timestampe en date & heure? Etles gérer avec le GMT ??

Ce serais trop bien :) merci ;)

OnRencontre
18/10/06 15:15:25

Je te conseille d'aller faire un tour sur http://www.phpinfo.net il y a des portions de script également pour gérer ça.

AzertyH
AzertyH
18/11/06 01:49:41

Merci pour ton tuto vraiment très claire. Il m'aide beaucoup pour comprendre ce qui me donne du fil à retordre en ce moment!

Merci mille fois

Les commentaires ne sont pas autorisés pour ce billet