[Résolu][PHP]récupérer tous les mercredis d'une période donnée

récupérer tous les mercredis d'une période donnée [Résolu][PHP] - PHP - Programmation

Marsh Posté le 11-07-2013 à 20:32:00    

Salut à tous  [:petrus75]  
 
Bon, voilà mon problème :
Il me faudrait une fonction qui pour deux dates données et un jour donné (lundi, mardi, mercredi...) me donne toutes les dates de ce jour sur cette période.
Par exemple, j'ai la période 20130101 (pour le premier janvier 2013) à 20130731 (pour le 31 juillet 2013) et j'aimerai tous les mercredis de cette période.
 [:transparency]  
 
Si vous avez des questions, n'hésitez pas !
 
Un grand merci.
 :D  :D  :D


Message édité par brutax le 17-07-2013 à 20:27:32
Reply

Marsh Posté le 11-07-2013 à 20:32:00   

Reply

Marsh Posté le 12-07-2013 à 10:11:36    

Hello,
 
la fonction strtotime permet de donner comme premier paramètre une chaine de type "Next Monday", à voir si tu peux faire une fonction qui parcours tes dates en y ajoutant 7 jours à chaque tour de boucle et qui appelle strtotime("Next Monday" ) pour te donner la date de ce jour :)

Reply

Marsh Posté le 12-07-2013 à 10:57:59    

ah pas mal !
je vais regarder ça.
Je poste ma fonction quand j'ai trouvé.
Merci !

Reply

Marsh Posté le 12-07-2013 à 16:14:45    

tu check quel jour est le premier
tu compte le nombre de jours entre debut et fin
tu fais une division entiere /7
tu arrondi au dessus ou en dessous en fonction de si tu c'est une fenetre inclusive ou exclusive
=> success


---------------
[VDS] rail vesa, bras ecran, support TV / [ACH] des machins
Reply

Marsh Posté le 14-07-2013 à 13:51:24    

okay.
Merci :)

Reply

Marsh Posté le 15-07-2013 à 09:56:38    

voilà ce que j'ai pu récupérer en posant la question à un de mes profs.
Je vais essayer de mettre en corélation vos réponses à tous les deux et celle là.
Je devrais pondre mon script dans la semaine.
a+
 

Citation :


il est possible de tester la correspondance entre la première  
date de la période et le jour à considérer :
si $DateStockee = '20130701'
- mktime(0,0,0,date('m', substr($DateStockee, 4, 2)),date('d',  
substr($DateStockee, 6, 2)),date('Y', substr($DateStockee, 0, 4)))
- Une boucle sur 0 à (60*60*24*6) au pas de (60*60*24) pour balayer les  
jours
- un test date('l', $DateDebut+$Index0) par rapport à date('l',  
$DateStockee) pour trouver l'égalité. Attention le résultat est en  
anglais 'Monday'
- ensuite une boucle sur 0 à $DateFin au pas de (60*60*24*7) pour  
récupérer toute les dates correspondant au jour de la semaine dans la  
période avec à chaque fois $DateDebut+$Index1 dans un tableau par  
exemple.

Reply

Marsh Posté le 17-07-2013 à 20:19:35    

Alors, voici mon code :
avec comme variables post :
anneeb (année de début ex : 2013)
moisb (mois de debut ex : 02)
jourb (jour de début ex : 14)

 

Pareil pour anneef, moisf et jourf mais pour la fin.

 

jour_semaine c'est le jour de la semaine que je cherche.
Exemple : lundi=1, mardi=2 ... dimanche=7.

 
Code :
  1. <?php
  2. $i=mktime(0,0,0,$_POST['moisb'],$_POST['jourb'],$_POST['anneeb']);
  3. $j=mktime(0,0,0,$_POST['moisf'],$_POST['jourf'],$_POST['anneef']);
  4. //$pas c'est 1 jour en time stamp
  5. //$fin, c'est une semaine. En gros, on commencera la boucle à 0 et on testera
  6. //les jours 1 par 1 jusqu'à arriver à la fin des 7 jours de la semaine.
  7. $pas=60*60*24;
  8. $fin=$i+(60*60*24*6);
  9. //recherche du premier jour choisi de la période donnée
  10. //si on tombe sur le bon, on sort de la boucle
  11. for($deb=$i; $deb<= $fin; $deb+=$pas)
  12. {
  13.  if(date("N", $deb)==$_POST['jour_semaine'])
  14.  {
  15.   $premier=$deb;
  16.   break;
  17.  }
  18. }
  19. //ici, on a un pas de 7 jours, histoire de tomber tout le temps sur le même jour de la semaine.
  20. //par exemple, on sort tous les mercredis de la période choisie.
  21. $pas=60*60*24*7;
  22. //récupération de tous les jours choisis pour la période donnée
  23. for($premier; $premier <= $j; $premier+=$pas)
  24. {
  25.  echo date("l d-m-Y", $premier)."<br>";
  26. }
  27. ?>


Message édité par brutax le 17-07-2013 à 20:37:55
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed