mktime, afficher des dates dans le futur

Cliquaumilieu
Invité n'ayant pas de compte PHPfrance

27 mars 2008, 17:32

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

ViPHP
ViPHP | 3300 Messages

27 mars 2008, 19:36

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.
Fait du php depuis que ca existe ou presque :)

Eléphant du PHP | 422 Messages

27 mars 2008, 21:56

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

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

27 mars 2008, 23:11

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

Eléphant du PHP | 422 Messages

28 mars 2008, 10:44

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

Cliquagauche
Invité n'ayant pas de compte PHPfrance

28 mars 2008, 12:53

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

ViPHP
ViPHP | 4674 Messages

28 mars 2008, 14:12

strtotime fonctionne très bien, je l'utilise assez régulièrement.
Attention toutefois à bien définir le date.timezone.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).