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

ViPHP
ViPHP | 3607 Messages

06 févr. 2009, 23:55

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! ;)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

07 févr. 2009, 00:22

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);
Quand tout le reste a échoué, lisez le mode d'emploi...

ViPHP
ViPHP | 3607 Messages

07 févr. 2009, 00:29

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 ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

07 févr. 2009, 00:38

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() ;) )
Quand tout le reste a échoué, lisez le mode d'emploi...

ViPHP
ViPHP | 3607 Messages

07 févr. 2009, 00:40

Ok, mici mici ;)

Eléphant du PHP | 185 Messages

07 févr. 2009, 02:16

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);