Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] cos w rodzaju kalendarza
Forum PHP.pl > Forum > Przedszkole
blizniak
witam
mam takie dane w mysql

  1. Dni wylotów
  2. 2/4/6 gdzie 1 - poniedziałek, 2 - wtorek, 3 - środa, 4 - czwartek, 5 - piątek, 6 - sobota, 7 - niedziela

  1. Okres kursowania
  2. 04.12.2006 - 22.03.2007


i teraz jak zrobic zeby w php wypisac np wszystkie wtorki czwartki i soboty pomiedzy ta data

zeby bylo cos takiego: wtorek 18.12.2006
czwartek 20.12.2006 itd.

ma ktos jakis pomysl jak to rozwiazac ?
nexis
  1. <?php
  2. $wyloty = array(2, 4, 6,);
  3.  
  4. $od['rok']  = '2006';
  5. $od['miesiac'] = '12';
  6. $od['dzien']  = '04';
  7.  
  8. $do['rok']  = '2007';
  9. $do['miesiac'] = '03';
  10. $do['dzien']  = '22';
  11.  
  12. $poczatek = mktime(0,0,0,$od['miesiac'],$od['dzien'],$od['rok']);
  13. $koniec  = mktime(0,0,0,$do['miesiac'],$do['dzien'],$do['rok']);
  14.  
  15. while ($poczatek <= $koniec)
  16. {
  17. if (array_key_exists(date('w', $poczatek), $wyloty))
  18. {
  19. echo date('l d.m.Y', $poczatek) . '<br />';
  20. }
  21. $poczatek += 60*60*24;
  22. }
  23. ?>


Dodam tylko, że niedziela to 0, a nie 7 zgodnie ze specyfikacją funkcji date" title="Zobacz w manualu PHP" target="_manual.
Darti
  1. <?php
  2. $dni = array(1=>'poniedziałek',2=>'wtorek',3=>'środa',4=>'czwartek',5=>'piątek',6=>'sobota',7=>'niedziela');
  3. list($start_day,$start_month,$start_year) = explode('.','04.12.2006');
  4. list($end_day,$end_month,$end_year) = explode('.','22.03.2007');
  5. $days = explode('/','2/4/6');
  6.  
  7. $start = mktime(1,1,1,$start_month,$start_day,$start_year);
  8. $end = mktime(1,1,1,$end_month,$end_day,$end_year);
  9.  
  10. $one_day = 24*60*60; // czas jednego dnia
  11.  
  12. for($time=$start; $time<=$end; $time += $one_day){
  13. $dzien = date('w',$time);
  14. $dzien = $dzien == 0 ? 7 : $dzien;  //bo w php 0 to niedziela
  15. if(in_array(date($dzien,$time),$days)){
  16. echo date('d.M.Y',$time).' to ' .$dni[$dzien]."\n";
  17. }
  18. }
  19. ?>
nexis
@Darti: Po cholerę przepisujesz mój kod nie wnosząc w nim nic nowatorskiego?
Darti
@nexis ani literki z Twojego kodu nie wziąłem ...
nexis
@Darti: To muszę pogratulować analogicznego toku myślenia.
Darti
pogratulujmy sobie nawzajem smile.gif
blizniak
wielkie dzieki za te rozwiazania
mam jeszcze takie pytanie do tego
czy istnieje jakis sposob aby te wyniki podpiac do jakiegos kalendarza
cos takiego jak jest tutaj lub cos podobnego
  1. http://www6.centralwings.com/skylights/cgi-bin/skylights.cgi?travel_type=1&sector1_o=ORK&sector1_d=WAW&sector_1_d=12&sector_1_m=122007&sector_2_d=12&sector_2_m=022008&ADULT=01&CHILD=0&INFANT=0&nom=2&page=SELECT&option=24772a9ca8977334d5d9cb5dd1720f1f&mode=0&pM=0&m2DP=0&m2=20080212WAWORK&oP=&module=SB&m1DP=0&m2DO=0&language=PL&rP=&m1DO=0&tc=1&pT=01ADULT0CHILD&m1=20071212ORKWAW
Darti
Pisane na szybko i w formie sprawdzenia samego siebie smile.gif
mam nadzieje ze Ci sie przyda ...

  1. <?php
  2. $dni = array(1=>'poniedziałek',2=>'wtorek',3=>'środa',4=>'czwartek',5=>'piątek',6=>'sobota',7=>'niedziela');
  3. $miesiace = array(1=>'Styczen', 2=>'Luty',3=>'Marzec',4=>'Kwiecień', 5=>'Maj',12=>'Grudzień');
  4. list($start_day,$start_month,$start_year) = explode('.','04.12.2006');
  5. list($end_day,$end_month,$end_year) = explode('.','22.03.2007');
  6. $days = explode('/','2/4/6');
  7.  
  8. $start = mktime(1,1,1,$start_month,$start_day,$start_year);
  9. $end = mktime(1,1,1,$end_month,$end_day,$end_year);
  10.  
  11. $one_day = 24*60*60; // czas jednego dnia
  12.  
  13. for($time=$start; $time<=$end; $time += $one_day){
  14. $dzien = date('w',$time);
  15. $dzien = $dzien == 0 ? 7 : $dzien;  //bo w php 0 to niedziela
  16. if(in_array(date($dzien,$time),$days)){
  17. $calendar[date('Y',$time)][(int)date('m',$time)][(int)date('d',$time)] = 'wylot albo cena biletu';
  18. //echo date('d.m.Y',$time)."<br>";
  19. }
  20. }
  21.  
  22. foreach ($calendar as $rok => $reszta){
  23. echo "<b>$rok</b><br>\n";
  24. draw_month($rok,$reszta);
  25. echo '<br>';
  26. }
  27.  
  28. function draw_month(&$rok,&$miesiac_dzien){
  29. global $miesiace;
  30. foreach (array_keys($miesiac_dzien) as $miesiac){
  31. $pierwszy_dzien = date('w',mktime(1,1,1,$miesiac,1,$rok));
  32. $ilosc_dni = date('t',mktime(1,1,1,$miesiac,1,$rok));
  33. echo '<b>'.$miesiace[$miesiac].'</b><br>';
  34. draw_days($pierwszy_dzien,$ilosc_dni,$miesiac_dzien[$miesiac]);
  35. echo "<br>";
  36. }
  37. }
  38.  
  39. function draw_days($pierwszy_dzien,$ilosc_dni,$dni_wylotu){
  40. global $dni;
  41. $pierwszy_dzien = $pierwszy_dzien == 0 ? 7 : $pierwszy_dzien;
  42. echo '<table border="1">';
  43. echo '<tr>';
  44. foreach ($dni as $dzien){
  45. echo '<th>'.$dzien.'</th>';
  46. }
  47. echo '</tr><tr>';
  48. $kratka = 0;
  49. // wyswietlam puste kratki na poczatku miesiaca
  50. for($i=1;$i<$pierwszy_dzien;$i++){
  51. $kratka++;
  52. echo '<td>&nbsp;</td>';
  53. if (!($kratka%7)) echo '</tr><tr>';
  54.  
  55. }
  56. //wyswietlam dni z odlotami
  57. for($i=1;$i<=$ilosc_dni;$i++){
  58. $kratka++;
  59. echo '<td>';
  60. echo $i;
  61. if(key_exists($i,$dni_wylotu)){
  62. echo '<br>'.$dni_wylotu[$i];
  63. }
  64. echo '</td>';
  65. if (!($kratka%7) && $kratka != $pierwszy_dzien + $ilosc_dni-1) echo '</tr><tr>';
  66. }
  67. // wyswietlam puste kratki na koncu miesiaca
  68. while ($kratka%7){
  69. $kratka++;
  70. echo '<td>&nbsp;</td>';
  71. }
  72. echo '</tr>';
  73. echo '</table>';
  74.  
  75. }
  76. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.