Page 1 sur 1

mktime, afficher des dates dans le futur

Posté : 27 mars 2008, 17:32
par Cliquaumilieu
Bonjour

Je cherche a afficher les dates (en chiffre) des dimanches d'un mois a venir
Par exemple:
Le mois de mars 2011 aura 4 dimanches: les 3 mars, 10 mars, 17 mars, 24mars, 31 mars.

Si quelqu'un connais une solution ce serait super! car je n'y connais pas grand chose en php, j'ai bien fais des essais mais je ne trouve pas :-(

Merci d'avance
Mathieu

Posté : 27 mars 2008, 19:36
par Nagol
une astuce consiste à utiliser une incrémentation dans ton mktime sur le jour, tu pourrais par exemple boucler sur un incrément +6 sur le jour à partir d'un dimanche que tu aura spécifié en dur et en faisant mumuse avec date('t') qui te donne le nombre de jour du mois. Un petit peu de math et ca devrait se faire.

Posté : 27 mars 2008, 21:56
par caroube
Le mois de mars 2011 aura 4 dimanches: les 3 mars, 10 mars, 17 mars, 24mars, 31 mars.
3, 10, 17, 24 et 31 : ça fait 5 dimanches et pas 4. Et ce sera en 2013 et pas en 2011 :roll:

Penser à la fonction strtotime() très pratique et trop souvent oubliée
$debutmois = strtotime("1 march 2011"); //1er mars 2011
if (date("w", $debutmois) == 0) {
  $dim1 = $debutmois; //Si le 1er est un dimanche
} else {
  $dim1 = strtotime("first sunday", $debutmois); //1er dimanche après le 1er du mois
}
$dim2 = strtotime("next sunday", $debutmois); 
$dim3 = strtotime("third sunday", $debutmois); 
$dim4 = strtotime("fourth sunday", $debutmois); 
$dim5 = strtotime("fifth sunday", $debutmois); 
echo date("l d/m/y", $debutmois)."<br>";
echo "--------<br>";
echo date("l d/m/y", $dim1)."<br>";
echo date("l d/m/y", $dim2)."<br>";
echo date("l d/m/y", $dim3)."<br>";
echo date("l d/m/y", $dim4)."<br>";
if (date("n", $dim4) == date("n", $dim5)) {
	echo date("l d/m/y", $dim5)."<br>";	//Affichage si le 5e dimanche est dans le même mois que le 4e dimanche
}
(attention, il n'y a pas de "second sunday", il faut utiliser "next" pour éviter les ambiguités avec les secondes)
il ne reste plus qu'à calculer les suivants en vérifiant que tu ne passes pas sur le mois suivant

Posté : 27 mars 2008, 23:11
par Hubert Roksor
Tu peux aussi te passer de timestamp dans strtotime() en spécifiant la date, eg "first sunday, march 2011", "last sunday, march 2011".

http://www.gnu.org/software/tar/manual/ ... r_113.html

Posté : 28 mars 2008, 10:44
par caroube
Tu peux aussi te passer de timestamp dans strtotime() en spécifiant la date, eg "first sunday, march 2011", "last sunday, march 2011".
Désolé, cela ne fonctionne pas
$first = strtotime("first sunday march 2011");
echo date("l d/m/y", $first); -------> Monday 28/03/11 !!!!

$last = strtotime("last sunday march 2011");
echo date("l d/m/y", $last); -------> Monday 28/03/11 !!!!

$first = strtotime("first sunday, march 2011");
echo $first; -------> -1
En revanche, dans les commentaires de strotime(), "jay at jaymunda dot com" a écrit une fonction get_day qui permet de faire
$first = get_day("first", "sunday", "03-2011");
$last = get_day("last", "sunday", "03-2011");

Passionnant

Posté : 28 mars 2008, 12:53
par Cliquagauche
Bonjour et merci a tous :-)

Je viens de passer un long moment avec date() et strtotime()

ça donne beaucoup d'idées, je vais continuer a explorer ces pages

Merci Caroube, le code fonctionne bien!!


Mathieu

Posté : 28 mars 2008, 14:12
par Hywan
strtotime fonctionne très bien, je l'utilise assez régulièrement.
Attention toutefois à bien définir le date.timezone.