Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Pętla dla daty strtotime();, Pętla dodaje co dwa i co 5 dni do osiągnięcia końcowej daty
gmc21
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 20.04.2015

Ostrzeżenie: (0%)
-----


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. }


Ten post edytował gmc21 20.04.2015, 12:38:38
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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.
Go to the top of the page
+Quote Post
gmc21
post
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 20.04.2015

Ostrzeżenie: (0%)
-----


Nie zapętla się tylko dodaje wartości +5 days i +2 days tak jakby było +7 days
Go to the top of the page
+Quote Post
mar1aczi
post
Post #4





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

Ostrzeżenie: (0%)
-----


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. ?>


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
gmc21
post
Post #5





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 20.04.2015

Ostrzeżenie: (0%)
-----


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

Ten post edytował gmc21 20.04.2015, 14:06:03
Go to the top of the page
+Quote Post
mar1aczi
post
Post #6





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

Ostrzeżenie: (0%)
-----


Jak masz tą samą ilość wydarzeń co i dat, to zapisuj daty do tablicy a potem z niej przypisuj je do wydarzenia smile.gif


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
gmc21
post
Post #7





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 20.04.2015

Ostrzeżenie: (0%)
-----


Dat jest więcej niż wydarzeń, poprawiłem wcześniejszy post.
Go to the top of the page
+Quote Post
mar1aczi
post
Post #8





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

Ostrzeżenie: (0%)
-----


  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


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
gmc21
post
Post #9





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 20.04.2015

Ostrzeżenie: (0%)
-----


Wielkie dzięki za pomoc smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 18:23