Page 1 sur 1

Opération sur les dates (+- 1 jour)

Posté : 06 févr. 2009, 23:55
par jojolapine
Bonsoir à tous,
J'essaye vainement depuis tout à l'heure de faire quelque chose de très simple me semble t'il...
Je souhaite transformer des variables que je reçois par l'url en une date du lendemain ou de la veille, voici la query string exemple:

Code : Tout sélectionner

?month=10&year=2008&day=26
Rien de bien compliqué n'est-ce pas?
alors j'ai fait ceci:
//récupération des variables GET
	$day=$_GET['day'];
	$month=$_GET['month'];
	$year=$_GET['year'];
	
	//transformation en timestamp
	$dsec=mktime(0,0,0,(int)$month,(int)$day,(int)$year);
	
	//jour précédent
	$pday=$dsec-86400;
	$pday=array('d'=>date("d",$pday),'m'=>date('m',$pday),'y'=>date('Y',$pday));
	
	//jour suivant
	$nday=$dsec+86400;
	$nday=array('d'=>date("d",$nday),'m'=>date('m',$nday),'y'=>date('Y',$nday));
	
	// Date en français
	$currentday=strftime("%A %d %B",$dsec);
En gros j'ajoute ou retire au timestamp correspondant à la date passée par l'url 86400, ce qui correspond au nombre de seondes dans un jour...
A priori ça devrait fonctionner... seulement, pour les paramètres ci-avant, ça ne fonctionne pas pour le jour suivant, on reste "bloqué" sur le 26/10... Alors que ça fonctionne sur d'autres mois, sur d'autres jours, etc...
Où est ma faute? quel est mon erreur de raisonnement? Bref merci à ceux et celle qui sauront m'aider! ;)

Posté : 07 févr. 2009, 00:22
par @rthur
Bonjour,

Je ne sais pas pourquoi ton code ne marche pas, en revanche, je ne vois pas pourquoi tu t'embètes avec des secondes :
//récupération des variables GET
    $day=$_GET['day'];
    $month=$_GET['month'];
    $year=$_GET['year'];
    
    //jour précédent
    $timestamp_hier=mktime(0,0,0,$month,$day-1,$year);
    print date("d-m-Y",$timestamp_hier);
    
    //jour suivant
    $timestamp_demain=mktime(0,0,0,$month,$day+1,$year);
    print date("d-m-Y",$timestamp_demain);

Posté : 07 févr. 2009, 00:29
par jojolapine
Euh, ben je sais pas , je me dit que si je fait -1 au 1er du moi, ça va faire des betises..., ou +1 au 31...
Donc j'ajoute des secondes sur un timestamp, ça me permet d'éviter ça...
C'est inutile?

EDIT: Curieusement, ça fonctionne...? C'est mktime qui sait que le 32/11, c'est le 1/12 ?

Posté : 07 févr. 2009, 00:38
par @rthur
EDIT: Curieusement, ça fonctionne...? C'est mktime qui sait que le 32/11, c'est le 1/12 ?
Et oui! (c'est même le 1er exemple de la doc de mktime() ;) )

Posté : 07 févr. 2009, 00:40
par jojolapine
Ok, mici mici ;)

Posté : 07 févr. 2009, 02:16
par savageman
Sinon t'as l'autre technique :
    $day=$_GET['day']; 
    $month=$_GET['month']; 
    $year=$_GET['year']; 
     
    //jour précédent 
    $aujourdhui=mktime(0,0,0,$month,$day,$year);

    $hier = strtotime('-1 day', $aujourdhui);
    $demain = strtotime('+1 day', $aujourdhui);