Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zakres dat
Forum PHP.pl > Forum > Przedszkole
termin
Witam, mam mały problemik. Zrobilem sklep internetowy (wew w firmie), wszystko dziala jak nalezy to czasu, czyli do grudnia, bo w styczniu wszystko sie pokszaniło. Wyjaśnie o co chodzi. W moim sklepie poszczegolne dzialy moga zamawiac artykuly biurowe. zamówienia są zbierane do 20 kazdego miesiaca wlacznie, a nastepnie są realizowane. Dzis mamy 2004-12-11 czyli jeszcze mogę robic zamowienie na miesiac grudzień, czyli zakres zbieranych zamowienien jest od 2004-11-21 do 2004-12-20. Dnia 2004-12-21 ten zakres juz bedzie od 2004-12-21 do 2005-01-20. No właśnie i tutaj pojawia sie problem, bo wczesniej zakres ustalalem tak ze dodawalem do miesiaca +1 i dzialalo, a przeciez miesiac 12+1 to juz 13 a nie ma miesiaca 13 rolleyes.gif Czy ktoś może mi pomóc w napisaniu skryptu ktory bedzie odpowiednio reagowal na konczący sie rok. Może ktoś napisze jakąś prostą funkcję, która by to załatwiła, lecz trzeba zwracać 2 wartości: $date_od i $date_do.

Aha i jeszcze jedno. prosze zwrócic uwagę, że jak ktoś dnia 2004-12-25 będzie sprawdzał zakres dat to musi to być w przedziale 2004-12-21 do 2005-01-20, a jak będzie sprawdzać 2005-01-10 to musi być dokładnie ten sam zakres. Zakresy zmieniają się po 20 każdego miesiąca.
quex
Wystarczy (chyba)
  1. <?php
  2. if($miesiac>=13) $rok++;
  3. ?>
termin
Pamiętaj że trzeba uwzględnić 2 daty wtedy jedna będzie z rokiem 2004 a druga z 2005.

Uzyskałem efekt który chciałem, lecz troche tego kodu jest, całkiem możliwe że ktoś potrafi to zrobić prościej i szybciej, opinie i wskazówki mile widziane. Dodalem zmienną $g, która pokazuje którego kodu aktualnie używa.

  1. <?
  2. $dzien_miesiaca=date(&#092;"d\");
  3. $zamow_do=20;
  4. $od_kiedy=$zamow_do+1;
  5. $rok=date(&#092;"Y\");
  6.  
  7. function zero($liczba)
  8. { 
  9. if ($liczba<10) {
  10. $nliczba=&#092;"0$liczba\";
  11. }
  12. else {
  13. $nliczba=$liczba;
  14. }
  15. return $nliczba;
  16. } 
  17.  
  18. if (date('n')==1)
  19. {
  20. if ($dzien_miesiaca<=$zamow_do) 
  21. {
  22. $g=1;
  23. $e1=12;
  24. $e2=1;
  25. $d1=($rok-1).&#092;"-\".zero($e1).\"-\".zero($od_kiedy);
  26. $d2=date(&#092;"Y\").\"-\".zero($e2).\"-\".zero($zamow_do);
  27. }
  28. else
  29. {
  30. $g=2;
  31. $e1=date(&#092;"n\", mktime (0,0,0,date(\"n\")+1,0,0));
  32. $e2=date(&#092;"n\", mktime (0,0,0,date(\"n\")+2,0,0));
  33. $d1=date(&#092;"Y\").\"-\".zero($e1).\"-\".zero($od_kiedy);
  34. $d2=date(&#092;"Y\").\"-\".zero($e2).\"-\".zero($zamow_do);
  35. }
  36. }
  37. else
  38. {
  39. if ($dzien_miesiaca<=$zamow_do) 
  40. {
  41. $g=3;
  42. $e1=date(&#092;"n\", mktime (0,0,0,date(\"n\"),0,0));
  43. $e2=date(&#092;"n\", mktime (0,0,0,date(\"n\")+1,0,0));
  44. $d1=date(&#092;"Y\").\"-\".zero($e1).\"-\".zero($od_kiedy);
  45. $d2=date(&#092;"Y\").\"-\".zero($e2).\"-\".zero($zamow_do);
  46. }
  47. else
  48. {
  49. $g=4;
  50. $e1=date(&#092;"n\", mktime (0,0,0,date(\"n\")+1,0,0));
  51. $e2=date(&#092;"n\", mktime (0,0,0,date(\"n\")+2,0,0));
  52. $d1=date(&#092;"Y\").\"-\".zero($e1).\"-\".zero($od_kiedy);
  53. if (date(&#092;"n\")==12)
  54. {
  55. $g=&#092;"4a\";
  56. $d2=($rok+1).&#092;"-\".zero($e2).\"-\".zero($zamow_do);
  57. }
  58. else
  59. {
  60. $g=&#092;"4b\";
  61. $d2=date(&#092;"Y\").\"-\".zero($e2).\"-\".zero($zamow_do);
  62. }
  63. }
  64. }
  65.  
  66. echo &#092;"Dzis: \".date(\"Y-m-d\").\"<br>g=$g<br>od \".$d1.\" do \".$d2;
  67. ?>
dr_bonzo
  1. <?php
  2. $the_day = 20; // [1, 28] questionmark.gif?
  3.  
  4. if ( intval( date( 'j' ) ) > $the_day )
  5. {
  6. // zamowienia na przyszly miesiac, tzn: 22 grudnia -> [21 grudnia, 20 stycznia]
  7. $current_month = intval( date( 'n' ) ); // [1, 12]
  8. $start_month = $current_month;
  9. $end_month = ( $current_month + 12 ) % 12 + 1; // nastepny miesiac
  10.  
  11. $current_year = intval( date( 'Y' ) );
  12. $start_year = $current_year;
  13. $end_year = ( $current_month == 12 ) ? $current_year + 1 : $current_year; // jesli teraz jest grudzien to koniec okresu przypada na nastepny rok
  14.  
  15. $start_day = $the_day + 1;
  16. $end_day = $the_day;
  17. }
  18. else
  19. {
  20. // zamowienia na obecny miesiac, tzn: 11 grudnia -> [21 listopad, 20 grudnia]
  21. $current_month = intval( date( 'n' ) ); // [1, 12]
  22. $start_month = ( $current_month + 10 ) % 12 + 1; // poprzedni miesiac; (11 = -1 + 12)
  23. $end_month = $current_month;
  24.  
  25. $current_year = intval( date( 'Y' ) );
  26. $start_year = ( $current_month === 1 ) ? ( $current_year - 1 ) : $current_year; // jesli teraz jest styczen to poczatek okresu przypada na poprzedni rok
  27. $end_year = $current_year;
  28.  
  29. $start_day = $the_day + 1;
  30. $end_day = $the_day;
  31. }
  32.  
  33. $start_date = mktime( 0, 0, 0, $start_month, $start_day, $start_year );
  34. $end_date = mktime( 23, 59, 59, $end_month, $end_day, $end_year );
  35.  
  36.  
  37. print( &#092;"START: \" . date( \"Y-M-d H:i:s\", $start_date ) . \"<br />END: \" . date( \"Y-M-d H:i:s\", $end_date ) . \"<br />\" );
  38. ?>
termin
No dziala, nawet godziny uwzględnia cool.gif z góry dziękuje za pomoc, przeanalizuje Twój kod. pozdrawiam.
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.