Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP] System rezerwacji - Pętla co cztery (potem 4 wolne)
Forum PHP.pl > Forum > Przedszkole
designez
Witam, na mojej stronie chcę zrobić mały system rezerwacji. Dostępne sloty są w Polu select.
I teraz jak to zrobić?
Jak zrobić najlepiej fukcję która liczy daty i radzi sobie z przełomami meisiąca.
Pętla będzie miała przypisany warunek początkowy jakąś datę od któej ma liczyć 4 dni dostępne a potem 4 dni wolne.
Dodatkowo dodam jeszcze warunek - czy dostępny slot (każde zlecenie będzie w bazie jak i jego data i godzina to już sam ogarnę)
Pierwsza data w option będzie pierwszy dostępnym slotem.



Tak to powinno wyglądać
  1. <option>Godzina 09 - 12, 19.05.2013</option>
  2. <option>Godzina 12 - 15, 19.05.2013</option>
  3. <option>Godzina 15 - 18, 19.05.2013</option>
  4. <option>Godzina 18 - 21, 19.05.2013</option>
  5.  
  6. <option>Godzina 09 - 12, 20.05.2013</option>
  7. <option>Godzina 12 - 15, 20.05.2013</option>
  8. <option>Godzina 15 - 18, 20.05.2013</option>
  9. <option>Godzina 18 - 21, 20.05.2013</option>
  10. ........ POTEM DLA 21, 22 i 4 dni przerwy
  11. <option>Godzina 09 - 12, 27.05.2013</option>
  12. <option>Godzina 12 - 15, 27.05.2013</option>
  13. <option>Godzina 15 - 18, 27.05.2013</option>
  14. <option>Godzina 18 - 21, 27.05.2013</option>
  15. ........ POTEM DLA 28, 29, 30 i dni przerwy

Tak zrobiłęm listę miesięcy i ilość dni.

  1. $check_date = array();
  2. $check_date['1'] = '31';
  3. $check_date['2'] = '28';
  4. $check_date['3'] = '31';
  5. $check_date['4'] = '30';
  6. $check_date['5'] = '31';
  7. $check_date['6'] = '30';
  8. $check_date['7'] = '31';
  9. $check_date['8'] = '31';
  10. $check_date['9'] = '30';
  11. $check_date['10'] = '31';
  12. $check_date['11'] = '30';
  13. $check_date['12'] = '31';
Greg0
Taki schemat wyświetlania liczb po 4 co 4 ode mnie
  1. <?php
  2. for($i=1; $i<31; $i++){
  3. echo $i;
  4. if($i%4==0) $i+=4;
  5. }


A z tablicą dni w miesiącu kombinowałbym w stronę miesiąc nieparzysty = 31; parzysty = 30; wyjątek luty.

Pozdrawiam
mar1aczi
cal-days-in-month
Data na podstawie dnia w roku
Gość
Cytat(Greg0 @ 19.05.2013, 20:34:37 ) *
Taki schemat wyświetlania liczb po 4 co 4 ode mnie
  1. <?php
  2. for($i=1; $i<31; $i++){
  3. echo $i;
  4. if($i%4==0) $i+=4;
  5. }


A z tablicą dni w miesiącu kombinowałbym w stronę miesiąc nieparzysty = 31; parzysty = 30; wyjątek luty.

Pozdrawiam


Dziękuję ci za ten kod ale jest w nim pewien mankament. Operuję na liczbach i kiedy w
  1. if($i%4==0) $i+=4;
znajdzie się np 4.06.2013 pomija tą datę i kolejne wychodzą błędnie.


Będę operował na dniach a miesiąc i rok będę doklejał do wyniku.
Gość
Obecnie mój kod wygląda tak

  1. <?php
  2. $dzisiaj = date("d.m.y");
  3. $today = date("j");
  4. $dzien = date("d");
  5. $month = date("n");
  6.  
  7. $tbl[1] = 31;
  8. $tbl[2] = 28;
  9. $tbl[3] = 31;
  10. $tbl[4] = 30;
  11. $tbl[5] = 31;
  12. $tbl[6] = 30;
  13. $tbl[7] = 31;
  14. $tbl[8] = 31;
  15. $tbl[9] = 30;
  16. $tbl[10] = 31;
  17. $tbl[11] = 30;
  18. $tbl[12] = 31;
  19. $monthtab = $tbl[''.$month.''];
  20. for($i=12; $i<$monthtab; $i++){
  21. if($i%4==0 ) $i+=4;
  22. if ($i<$monthtab) {
  23. echo ''.$i.'<br>';
  24. }
  25.  
  26. }
  27. ?>
  28.  
  29.  
  30. Wyświetla dostępne sloty dla bieżącego miesiąca. Jutro popracuję nad pętlą dla całego roku ze sprawdzeniem warunki (długość miesiąca)
  31.  
  32. Proszę nie czepiać się jeśli kod nie jest poprawny i zgodny ze standardami.
  33. Pozdrawiam
Greg0
Prosiłeś o schemat to dałem schemat działania wink.gif
Nikt nie broni iterować w pętli dat w sposób jaki potrzebujesz, wtedy nie martwisz się nawet o ilość dni w miesiącu wszystko się zrobi samo. Twoim zadaniem byłoby tylko podać przedział dat dla których masz wyświetlić dni po 4 co 4.
Tutaj przykład dla całego 2013 roku:
  1. $date = '01.01.2013';
  2. $end_date = '31.12.2013';
  3. $i=1;
  4. while (strtotime($date) <= strtotime($end_date)) {
  5. var_dump($date);
  6. $date = ($i%4==0) ? date("d.m.Y", strtotime("+5 day", strtotime($date))) : date("d.m.Y", strtotime("+1 day", strtotime($date)));
  7. $i++;
  8. }

Skrypt znaleziony w internecie i przerobiony pod twoje potrzeby.
Do iteracji możesz też użyć klasy DateTime i DateInterval od PHP 5.3 ale myślę że dla takich zastosować powyższe wystarczy
zegarek84
korzystaj i operuj na timestap... @Greg0 podał mniej więcej poprawne rozwiązania i słusznie też podsuwa DateTime i DateInterval które powinny Ci ułatwić operowanie na dacie...
sam na zaliczenie ostatnio pisałem prosty systemik rezerwacji (był zakaz korzystania z FW) i to co masz zrobić jest proste...
masz datę bez godziny, tzn. nowy dzień godzina 00:00, ten dzień jest wyrażony w liczbie sekund od któregoś tam roku ;p... i teraz kolejny dzień to 60s * 60min * 24h ;p - teraz użyj wyobraźni... najłatwiej Ci to też w bazie będzie przechowywać raczej jako timestamp...
http://www.zegarek84.098.pl/index/o_stronie/#autor - możesz tam kasować co chcesz ;p
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.