Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pętla dla daty strtotime();
Forum PHP.pl > Forum > Przedszkole
gmc21
Cześć wszystkim,

Jestem bardzo początkujący i nie wiem jak zrobić pętlę, która po ustawieniu daty startowej i końcowej wypisywałaby kolejne daty co 2 oraz co 5 dni, aż do wyniku <= daty końcowej.
Pomożecie? biggrin.gif

  1.  
  2. $data = strtotime('2015-04-21');
  3.  
  4. $start = strtotime('+5 days', $data);
  5. $per2 = strtotime('+2 days', $start);
  6. $per5 = strtotime('+5 days', $per2);
  7.  
  8. $per2b = strtotime('+2 days');
  9. $sum = $per5 + $per2b;
  10.  
  11. $end = strtotime('+8 week', $start);
  12.  
  13. // echo date('Y-m-d', $start) . '<br>';
  14. // start pętli : wypisuje daty co dwa i co pięć aż do daty końcowej $end = strtotime('+8 week', $start);
  15. // echo date('Y-m-d', $per2) . '<br>';
  16. // echo date('Y-m-d', $per5) . '<br>';
  17. // koniec pętli jeśli ostatnia data z pętli będzie mniejsza bądz równa do daty końcowej $end = strtotime('+8 week', $start);
  18.  
  19. while ( $sum <= $end) {
  20. echo date('Y-m-d', $sum) . '<br>';
  21. }
  22.  


Zmodyfikowałem poprzednią pętle, tylko zamiast wypisywać co 5 dni i co 2 dni to po prostu dodaje, i wypisuje daty co 7 dni :/

Czy może mi ktoś pomóc?

  1. // Data początkowa
  2. $date = '2015-04-21';
  3. // Data końcowa
  4. $end_date = '2015-12-30';
  5.  
  6. while (strtotime($date) <= strtotime($end_date)) {
  7. echo "$date" . '<br>';
  8. $date = date("Y-m-d", strtotime("+5 day", strtotime($date)));
  9. $date = date("Y-m-d", strtotime("+2 day", strtotime($date)));
  10. }
phpion
Zapewne zapętla Ci się w nieskończoność - mam rację? smile.gif Wewnątrz pętli zapomniałeś o modyfikowaniu zmiennej $date (np. dodając do niej 1 dzień przy każdym przebiegu). Bez tego warunek cały czas będzie spełniony i skrypt się zapętli.
gmc21
Nie zapętla się tylko dodaje wartości +5 days i +2 days tak jakby było +7 days
mar1aczi
Np.
  1. <?php
  2.  
  3. $ctime = mktime(0, 0, 0, date("m") , date("d"), date("Y"));
  4. $start = strtotime('+5 days', $ctime);
  5. $end = strtotime('+8 weeks', $ctime);
  6.  
  7. $intervals = array(2, 5); // co ile dni przeskakiwać
  8. $intervals_elems = count($intervals);
  9. $cstep = 0;
  10.  
  11. $tmp = $start;
  12. echo "start: ".date('Y m d',$start) . "</br>\n";
  13. do {
  14.  
  15. $tmp = strtotime('+'.$intervals[$cstep%$intervals_elems].' days', $tmp);
  16. $cstep++;
  17. echo "$cstep: ".date('Y m d', $tmp)."\n";
  18.  
  19. } while ($tmp < $end);
  20.  
  21. echo "koniec: ".date('Y m d', $end)."\n";
  22. ?>
gmc21
Pięknie działa, dzięki śliczne, a jakbym chciał dodać np. 5 wydarzeń, żeby przypisywać automatycznie do każdej daty:

wydarzenie 1 - data 1
wydarzenie 2 - data 2
wydarzenie 3 - data 3
wydarzenie 4 - data 4
wydarzenie 5 - data 5
wydarzenie 1 - data 6
wydarzenie 2 - data 7
wydarzenie 3 - data 8
wydarzenie 4 - data 9
wydarzenie 5 - data 10
mar1aczi
Jak masz tą samą ilość wydarzeń co i dat, to zapisuj daty do tablicy a potem z niej przypisuj je do wydarzenia smile.gif
gmc21
Dat jest więcej niż wydarzeń, poprawiłem wcześniejszy post.
mar1aczi
  1. <?php
  2.  
  3. $ctime = mktime(0, 0, 0, date("m"), date("d"), date("Y"));
  4. $start = strtotime('+5 days', $ctime);
  5. $end = strtotime('+8 weeks', $ctime);
  6.  
  7. $intervals = array(2, 5); // co ile dni przeskakiwać
  8. $intervals_elems = count($intervals);
  9. $cstep = 0;
  10. $events = array('w1', 'w2', 'w3', 'w4', 'w5');
  11. $event_elems = count($events);
  12.  
  13. $tmp = $start;
  14. echo "start: ".date('Y m d',$start) . "</br>\n";
  15. do {
  16.  
  17. $tmp = strtotime('+'.$intervals[$cstep%$intervals_elems].' days', $tmp);
  18. echo $events[$cstep%$event_elems].": ".date('Y m d', $tmp)."\n";
  19. $cstep++;
  20.  
  21. } while ($tmp < $end);
  22.  
  23. echo "koniec: ".date('Y m d', $end)."\n";
  24. ?>

Dalej myślisz już sam smile.gif
gmc21
Wielkie dzięki za pomoc smile.gif
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.