Date()+mktime pour le prochain jour

elvis
Invité n'ayant pas de compte PHPfrance

09 juin 2009, 17:31

Bonjour,
Je désespère de ne pas trouver comment faire ceci :
"Quelques soit la date d'aujourd'hui, afficher la date du prochain 2eme mardi du mois."

avec un calendrier, on trouve :
Dans le meilleur des cas, le 1er mardi du mois est le 1, le second mardi est donc le 8.
Dans le pire des cas, le 1er mardi du mois est le 7, le second mardi est donc le 14.

Mais après je ne sais pas comment traduire ca avec les fonctions date(), mktime() :/

ViPHP
ViPHP | 2291 Messages

09 juin 2009, 22:55

Salut,

Essaye ceci :wink:
Comme je ne suis pas certain d'avoir compris voici deux exemple.

:arrow: Pour le mois prochain le deuxième Mardi.
//-->Zone horraire utiliser ici Europe/Paris.--//
date_default_timezone_set('Europe/Paris');
//-->La date de reference +1 mois et a partir du 1 du mois.--//
$NewDate = mktime(0, 0, 0, date('m')+1, 1, date('Y')); 
//-->Ici on demande le Second mardi (Second Tuesday) du mois de la date de reference.--//
echo 'Le deuxième Mardi du mois prochain est le : '.strftime('%d-%m-%Y', strtotime('Second Tuesday', $NewDate));
:arrow: Pour le deuxième Mardi du mois en cours.
//-->Zone horraire utiliser ici Europe/Paris.--//
date_default_timezone_set('Europe/Paris');
//-->La date de reference +1 mois et a partir du 1 du mois.--//
$NewDate = mktime(0, 0, 0, date('m'), 1, date('Y'));
//-->Ici on demande le Second mardi (Second Tuesday) du mois de la date de reference.--//
echo 'Le deuxième Mardi du mois est le : '.strftime('%d-%m-%Y', strtotime('Second Tuesday', $NewDate));
Merci pour l'exercice :wink:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Invité
Invité n'ayant pas de compte PHPfrance

10 juin 2009, 11:00

Salut !
Merci bien !
Tu as bien compris, sauf que le truc parfait serai le mélange des deux. c.a.d selon la date du jour, il décide si le prochain second mardi est ce mois-ci OU le mois prochain.
J'ai donc modifié comme cela :
echo 'Le Prochain deuxième Mardi à venir est le : ';
if( date("Y-m-d") <= ($mardi = strftime('%Y-%m-%d', strtotime('Second Tuesday', mktime(0, 0, 0, date('m'), 1, date('Y'))))))
// si la date actuelle n'a pas encore dépassé le prochain second mardi du mois en cours (= on est au début du mois) on affiche le second mardi qui arrivera dans qq jours
	echo $mardi;
else
 // sinon, nous sommes entre le milieu et la fin du mois = le second mardi du mois en cours est passé, nous affichons alors le second mardi du mois prochain :
	echo strftime('%Y-%m-%d', strtotime('Second Tuesday', mktime(0, 0, 0, date('m')+1, 1, date('Y'))));
Ca marche bien, nous sommes le mercredi 10 juin, le second mardi du mois de juin était hier.
Il m'affiche donc :
Le Prochain deuxième Mardi du mois est le : 2009-07-14
:)
En tout cas merci pour strtotime('Second Tuesday',..) que je ne connaissais pas !! Je suis surpris de voir que PHP peut générer une date avec des mots du langage.. bien joué.

--------------------
Sinon, avant de voir ton message j'avais réussi à le faire avec un code différent.
Je le poste où cas où ca pourait aider.
Je me servi de date("N") qui permet d'avoir le jour de la semaine : N=2 pour mardi donc.
Algo : j'itère sur la génération de date des 30 jours du mois, quand je tombe sur N=2 (mardi) j'enregistre la date dans un tableau, la tableau contient donc 4 dates pour les 4 mardi. Ensuite je n'ai plus qu'a prendre le second élément du tableau pour avoir le second mardi. Avec idem, la vérification sur la date du jour.
Ma méthode est moins joli, j'avoue ;)
Le code :
$mardis = array();
for($i=1;$i<32;$i++){ // itération sur chaque jour du mois
	if( date("N", mktime(0, 0, 0, date("m")  , $i, date("Y"))) == 2){	// Si le jour est un mardi
		$mardis[] = date("Y-m-d", mktime(0, 0, 0, date("m"), $i, date("Y"))); // on stocke cette date
	}
}
// on a les 4 mardis du mois en cours.
// verification si on a pas dépassé le second mardi :
if( date("Y-m-d") > $mardis[1]){	 // on l'a passé.. on refait la meme chose mais sur le mois prochain
	$mardis = array();
	for($i=1;$i<32;$i++){
		if( date("N", mktime(0, 0, 0, date("m")+1  , $i, date("Y"))) == 2)
			$mardis[] = date("Y-m-d", mktime(0, 0, 0, date("m")+1, $i, date("Y")));
	}
	echo  $mardis[1];
}
else   // on est au début du mois
	echo = $mardis[1];
Ca marche aussi bien mais ce n'est bien sur pas optimisé :)

@+

Eléphant du PHP | 65 Messages

10 juin 2009, 11:46

Bonjour,
Pour le plaisir de placer l'opérateur ternaire,
en piquant le strtotime à dumbar,
j'avais fait comme ça :
date_default_timezone_set('Europe/Paris'); // Zone horaire

(date("j")>14) ? // Si on a passé le deuxieme mardi du mois courant
	$newDate=mktime(0,0,0, date("m")+1, 1, date("Y")) : // Alors on se place le 1er jour du mois suivant
	$newDate=mktime(0,0,0, date("m")+1, 1, date("Y"));  // Sinon on se replace au 1er jour du mois courant 

// affichage du second mardi du mois de reference
echo 'Le prochain deuxième Mardi du mois est le : '.strftime('%d-%m-%Y', strtotime('Second Tuesday', $newDate)); 
Fred

ViPHP
ViPHP | 2291 Messages

10 juin 2009, 15:13

Bonjour,
Pour le plaisir de placer l'opérateur ternaire,
en piquant le strtotime à dumbar,
j'avais fait comme ça :
date_default_timezone_set('Europe/Paris'); // Zone horaire

(date("j")>14) ? // Si on a passé le deuxieme mardi du mois courant
	$newDate=mktime(0,0,0, date("m")+1, 1, date("Y")) : // Alors on se place le 1er jour du mois suivant
	$newDate=mktime(0,0,0, date("m"), 1, date("Y"));  // Sinon on se replace au 1er jour du mois courant 

// affichage du second mardi du mois de reference
echo 'Le prochain deuxième Mardi du mois est le : '.strftime('%d-%m-%Y', strtotime('Second Tuesday', $newDate)); 
Fred
:-k dumbar c'est qui lui :?: :wink:
J'étais partie sur ton idée aussi, mais finalement j'ai préféré l'autre méthode .
Modifié en dernier par dunbar le 10 juin 2009, 22:30, modifié 1 fois.
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

ViPHP
ViPHP | 2291 Messages

10 juin 2009, 16:26

En tout cas merci pour strtotime('Second Tuesday',..) que je ne connaissais pas !! Je suis surpris de voir que PHP peut générer une date avec des mots du langage.. bien joué.
strtotime — Transforme un texte anglais en timestamp.
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.