Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Jak zrobić pętlę z przedziałami dat
lamcpp
post
Post #1





Grupa: Zarejestrowani
Postów: 372
Pomógł: 2
Dołączył: 10.05.2009

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


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> ?
Go to the top of the page
+Quote Post
Piogola
post
Post #2





Grupa: Zarejestrowani
Postów: 151
Pomógł: 36
Dołączył: 1.02.2011
Skąd: Warszawa

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


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

Ten post edytował Piogola 3.02.2011, 22:13:29
Go to the top of the page
+Quote Post
wookieb
post
Post #3





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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





Grupa: Zarejestrowani
Postów: 111
Pomógł: 10
Dołączył: 16.07.2009
Skąd: Toruń

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


  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 (IMG:style_emoticons/default/oneeyedsmiley02.png) , sprawdzone, przetestowane. Specjalnie dla Ciebie (IMG:style_emoticons/default/Lkingsmiley.png)

Ten post edytował benio101 3.02.2011, 22:56:07
Go to the top of the page
+Quote Post
lamcpp
post
Post #5





Grupa: Zarejestrowani
Postów: 372
Pomógł: 2
Dołączył: 10.05.2009

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


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
Go to the top of the page
+Quote Post
osl
post
Post #6





Grupa: Zarejestrowani
Postów: 260
Pomógł: 41
Dołączył: 6.04.2009
Skąd: Gdańsk/okolice

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


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
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 20:48