Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][MySQL][PHP] System rezerwacji - Pętla co cztery (potem 4 wolne)
designez
post 19.05.2013, 17:22:16
Post #1





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 11.08.2012

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


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';
Go to the top of the page
+Quote Post
Greg0
post 19.05.2013, 20:34:37
Post #2





Grupa: Zarejestrowani
Postów: 264
Pomógł: 54
Dołączył: 31.08.2007
Skąd: Tychy

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


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

Ten post edytował Greg0 19.05.2013, 20:36:25
Go to the top of the page
+Quote Post
mar1aczi
post 20.05.2013, 07:37:13
Post #3





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

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


cal-days-in-month
Data na podstawie dnia w roku


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
-Gość-
post 20.05.2013, 22:27:56
Post #4





Goście







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 to the top of the page
+Quote Post
-Gość-
post 20.05.2013, 22:34:24
Post #5





Goście







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
Go to the top of the page
+Quote Post
Greg0
post 21.05.2013, 13:47:18
Post #6





Grupa: Zarejestrowani
Postów: 264
Pomógł: 54
Dołączył: 31.08.2007
Skąd: Tychy

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


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

Ten post edytował Greg0 21.05.2013, 13:47:58
Go to the top of the page
+Quote Post
zegarek84
post 21.05.2013, 18:50:42
Post #7





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


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

Ten post edytował zegarek84 21.05.2013, 18:51:52


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

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 Wersja Lo-Fi Aktualny czas: 13.06.2025 - 10:02