OVH Cloud OVH Cloud

Date (suite)

3 réponses
Avatar
mrbug
Bonjour,

j'ai une serie de dates dans une base sous la forme jj/mm/yyyy.
j'aimerai les récuperer pour les afficher, mais j'aimerai également afficher
ces dates plus 15 jours.
Comment faire?
Merci.

Exemple:

Depuis le <? echo $date; ?> jusqu'au <? echo $dateplusquinze; ?>

Depuis le 17/09/2003 jusqu'au 02/10/2003

3 réponses

Avatar
Philg42360
j'ai une serie de dates dans une base sous la forme jj/mm/yyyy.
j'aimerai les récuperer pour les afficher, mais j'aimerai également
afficher

ces dates plus 15 jours.
Si c'est pour obtenir les dates suite à une requête sql, convertit ton champ

en champ DATE.
Les dates des bdd doivent être de la forme yyyy-mm-dd autrement, tu ne
pourra pas faire de calcul, ordonnencement dessus.
Pour les plages voir les fonction dateadd()... de sql

--
--Philippe
Une commune de la Loire : http://panissieres.free.fr
Le parc des animaux miniatures http://zoonat.free.fr

Avatar
marc guillaume
mrbug wrote:

Bonjour,

j'ai une serie de dates dans une base sous la forme jj/mm/yyyy.
j'aimerai les récuperer pour les afficher, mais j'aimerai également
afficher ces dates plus 15 jours.
Comment faire?


L'idée générale c'est de transformer ta date en texte en timestamp Unix
(c'est à dire le nombre de secondes écoulées depuis une date de référence,
de mémoire quelque chose comme le premier janvier 1970 à minuit).

Une fois que tu as ce timestamp tu lui ajoutes le nombre de secondes qui
correspond à tes 15 jours, c'est à dire 15 x 24 x 60 x 60 soit 15 jours de
24 heures de 60 minutes de 60 secondes ce qui fait 1296000 en données
corrigées des variations saisonnières.

Si on appelle $mon_timestamp ce timestamp augmenté tu l'affiches en date :
$ma_date_plus_quinze_joursÚte("d/m/Y",$mon_timestamp);

La seule difficulté dans ton affaire c'est que la fonction strtotime qui
fait ce que tu cherches, c'est à dire convertir une date littérale en
timestamp ne fonctionne qu'avec des dates au format anglosaxon (le mois
puis le jour et l'année).

Donc il faut que tu l'émules pour le format français. Si tu es certain que
tu as toujours un / comme séparateur tu peux utiliser la fonction explode
et récupérer le jour, le mois et l'année dans un tableau.
si ta date littérale est $date :

$tab_date=explode("/",$date);
$jour=$tab_date[0];
$mois=$tab_date[1];
$annee=$tab_date[2];

Ensuite tu utilises tout bêtement la fonction mktime pour créér ton
timestamp : $stampdate=mktime(0,0,0,$mois,$jour,$annee);

et là tu reviens à ce que je disais :

$mon_timestamp=$stampdate + (15*24*60*60);

$ma_date_plus_quinze_joursÚte("d/m/Y",$mon_timestamp);

Le mieux est de mettre cette petite cuisine dans une fonction dateToStamp ou
tout autre joli nom évocateur et tu peux ajouter un raffinement qui est de
passer le nombre de jour à ajouter en argument et éventuellement un
séparateur si c'est autre chose que "/" (mais en mettant / par défaut, ce
qui t'évite de saisir cet argument si c'est bien des /) ce qui donnerait :

function dateToStamp($date,$nb_jours,$separateur="/"){
$tab_date=explode($separateur,$date);
$jour=$tab_date[0];
$mois=$tab_date[1];
$annee=$tab_date[2];
$stampdate=mktime(0,0,0,$mois,$jour,$annee);
$mon_timestamp=$stampdate + ($nb_jours*24*60*60);
return date("d/m/Y",$mon_timestamp);
}

ainsi tu l'appelles comme ça :

$ma_nouvelle_dateÚteToStamp($date_depart,15);
ou
$ma_nouvelle_dateÚteToStamp($date_depart,15,"-");
si ton séparateur est un tiret.

Voili voilou

A+

Avatar
Thibaut Allender
"dominique" wrote in message
news:bjmg9n$aqe$

$res = strftime('%d/%m/%Y', $ts+86400*15);


c'est une tres mauvaise idee de considerer 15 jours comme 86400 sec * 15
en effet, lors des passages a l'heure d'ete et d'hiver, les jours font alors
23 ou 25 heures, et on se retrouve alors avec un jour d'avance ou de retard

il est bcp plus prudent d'utiliser mktime(0,0,0,$m,$j+15,$a), car mktime
prend en consideration ces changements d'heure

a+

--
+ thibaut allender // web design + php dev + digital photo
+ http://www.capsule.org