Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak zrobić pętlę z przedziałami dat
Forum PHP.pl > Forum > Przedszkole
lamcpp
Witam mam dwie zmienne w których trzymam datyt typu: $zmienna1 w której jest data: 12.01.2010 oraz $zmienna2 z datą 23.01.2010
Jak zrobić pętlę która wyświetli wszystkie daty z przedziału od <12.01.2010,23.01.2010> ?
Piogola
Obie daty zamieniasz na format unixowy, w pętli while sprawdzasz czy data wcześniejsza jest mniejsza od tej późniejszej, a w pętli dodajesz do tablicy i od razu dodajesz do wcześniejszej daty 1 dzień.
strtotime, while
wookieb
  1. $period = new DatePeriod(new DateTime('2010-01-12'), new DateInterval('P1D'), new DateTime('2010-01-23'));
  2.  
  3. foreach ($period as $date) {
  4. print_r($date);
  5. // $date to obiekt DateTime
  6. }

I jechana.
benio101
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  2. <html>
  3. <head>
  4. <title>New document</title>
  5. <meta name="generator" content="TSW WebCoder">
  6. </head>
  7.  
  8. <script>
  9. function laduj(){
  10.  
  11. var pisz="";
  12. var dzien=12;
  13. var miesiac=1;
  14. var rok=2010;
  15. var dziendo=23;
  16. var miesiacdo=1;
  17. var rokdo=2010;
  18.  
  19. var dni=new Array(12);
  20. dni[1]=dni[3]=dni[5]=dni[7]=dni[8]=dni[10]=dni[12]=31;
  21. dni[2]=28;
  22. dni[4]=dni[6]=dni[9]=dni[11]=30;
  23.  
  24. function przestepny(rok){
  25. return (!(rok%4) && !(!(rok%100) && rok%400));
  26. }
  27.  
  28. while(1){
  29. pisz+=(dzien<10?"0":"")+dzien+".";
  30. pisz+=(miesiac<10?"0":"")+miesiac+".";
  31. pisz+=rok+"<br>";
  32. ++dzien;
  33. if(dzien>dni[miesiac]+(miesiac==2 && przestepny(rok))){
  34. dzien=1;
  35. ++miesiac;
  36. if(miesiac>12){
  37. miesiac=1;
  38. ++rok;
  39. }
  40. }
  41. if((rok>rokdo) || (rok>=rokdo && miesiac>miesiacdo) || (rok>=rokdo && miesiac>=miesiacdo && dzien>dziendo)){
  42. break;
  43. }
  44. }
  45. document.write(pisz);
  46. }
  47. </script>
  48.  
  49. <body onload="laduj()">
  50.  
  51.  
  52.  
  53. </body>
  54. </html>


Proszę bardzo oneeyedsmiley02.png , sprawdzone, przetestowane. Specjalnie dla Ciebie Lkingsmiley.png
lamcpp
próbowałem zrobić to tak jak pisze piogola:
  1. $wynik1 = strtotime($rok.'-'.$miesiac.'-'.$dzien);
  2. $wynik2 = strtotime($rok2.'-'.$miesiac2.'-'.$dzien2);
  3.  
  4. while($wynik1 <= $wynik2){
  5. echo strtotime("+1 day").'<br />';
  6. }

ale efekt jest bardzo mizerny:/ Zamiast pokazywać mi kazdą kolejną datę od przedziału $wynik1 do $wynik2 pokazuje mi w pętli cały czas tą samą datę (pętla się nie zakoncza;/;/) i to date w formacie unixowym
prosze o pomoc
osl
jak już chcesz robić tak jak napisał Piogola, to zajrzyj do strtotime. I zobacz jaki argument podajesz.
Skoro cały czas masz "+1 day", to jakim cudem ma Ci wyświetlić inną datę?
A timestamp możesz sobie dowolnie przerobić na coś innego, np. przy pomocy date
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.