Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Porównywanie godzin
Forum PHP.pl > Forum > PHP
sematuszewski
Witam serdecznie chciałbym prosić o pomoc, otóż nie mogę wymyślić w jaki sposób porównać godziny. Chodzi mi o to że skrypt będzie zwrazał "prawdę" np. w przedziale od 20:00-1:00, a potem fałsz smile.gif. Napisałem sobie taką funkcję:

  1. $czasstart='20:00';
  2. $czasstop='22:00';
  3.  
  4. if (date("H:i")>=$czasstart and date("H:i")<=$czasstop)
  5. {
  6. echo 'tak';
  7. }
  8. else {
  9. echo 'nie';
  10. }


Skrypt porównuje aktualną godzinę z godzinami w zmiennych smile.gif W tym przypadku jeśli godzina aktualna jest >= godzinie startowej i <= godzinie końcowej skrypt się wykonuje 'TAK' w przeciwnym razie 'NIE'...

I teraz moje pytanie jak zrobić to, gdyż jeśli w zmiennej podstawię godzinę 1:00 no to skrypt już nie działa prawidłowo smile.gif
Może jakaś sugestia/podpowiedź. Oczywiście format godziny nie musi być 24h równie dobrze może być 12h, byleby to działało smile.gif

Pozdro...
ADeM
W złą stronę idziesz. Porównujesz teksty zamiast liczb.
markonix
Spróbuj potraktować godzinę i minute jako jedną liczbę bez dwukropka.
Można by też pomyśleć o zastosowaniu UNIX, który do porównywania dat jest najlepszy.
sematuszewski
Dzięki za odpowiedź smile.gif

Czyli jakby to zrobić godzinę rozbić na dwie skłądowe tj.
- godzina
- minuty

I potem każde kolejno porównywac questionmark.gif


Tak bardziej nawiązując...

Mam panel administratora, w którym chcę ustawić np. wyśiwetlanie się komunikatów o danej godzinie+minuty.
Myślę że wiadomo o co chodzi smile.gif

Tylko nie wiem jak zrobić aby godzina 1:00 była godziną późniejszą niż np. 20:00. W pm/am również nie wiem jak to rozwiązać, gdyż nie mam pomysłu smile.gif

Z rozbiciem na składowe można zrobić tak:

  1. $czasstartg=20;
  2. $czasstartm=10;
  3. $czasstopg=22;
  4. $czasstopm=00;
  5.  
  6. if (date("H")>=$czasstartg and date("i")>=$czasstartm and date("H")<=$czasstopg and date("i")<=$czasstopm)
  7. {
  8. echo 'tak';
  9. }
  10. else {
  11. echo 'nie';
  12. }


No ale niestety to nadal nie rozwiązuje problemu, bo jeśli jest godzina 20, a czas zakończenia to 1 w nocy no to i tak nie działa smile.gif

PS. zmienne z końcówką "g" to godziny, a z "m" minuty tongue.gif

Edit:

No ale jeśli potraktuję to jako jedną liczbę to godzina 23:00 = 2300, a godzina 01:00 = 100 więc tak czy tak nie będzie działało smile.gif

UNIX questionmark.gif Może jakieś podpowiedzi tongue.gif
markonix
Ale to będzie regularnie np. codziennie od 20 do 23 tak?

Zrób tak:
Kod
$godzina = (int) date('H');
sematuszewski
No tak najlepiej regularnie, ale jeśli masz pomysł na rozwiązanie tego np. z dniami tygodnia to oki smile.gif

No tak (int) date('H'); tylko że to mi zwraca liczbę np. 20 smile.gif dla godziny 20 i po porównaniu z godziną 1 i tak nie działa :/

ADeM
Bo godzina 1 jest wcześniej niż godzina 20. O ile dobrze rozumiem Twój problem, to musisz porównywać całe daty.
sematuszewski
No tak co racja to racja w końcu godzina 00:00 rozpoczyna nowy dzień, no nie pomyślałem tongue.gif:P

Czyli mówisz, abym zrobił to tak, że skrypt porównuje najpierw godziny, a jeśli godzina przypada po 00:00 to i daqty smile.gifsmile.gif questionmark.gif?
ADeM
http://php.net/manual/en/function.strtotime.php + spróbuj operować na całych datach
sematuszewski
Oki dzięki za rady smile.gif wszelkie inne sugestie mile widziane tongue.gif

Tak więc z mojej strony leci do obydwu z Was pomógł smile.gif I jesli mi się uda to dam znań smile.gif


Pozdro...


Edit:

Teraz tak myśląc wpadłem na prostszy sposób smile.gif, żeby już się nie bawić w te przedziały zrobie to tak smile.gif

Jeśli aktualna godzina = godzinie rozpoczęcia to sprawdzany jest kolejny warunek smile.gif Który wygląda następująco:

godzina rozpoczęcia + np. 30 minut = godzinie aktualnej, to skrypt nie zostanie wykonany smile.gif

Jednym słowem mówiąc nie będzie przedziału między godziną, a godziną, lecz będzie godzina rozpoczęcia i przez ile minut skrypt ma przyjmować wartość 'TRUE', myślę, że to łatwiejszy sposób, a w sumie zachowany jest ten sam sens działania smile.gif Co Wy na to??

Pozdro...
markonix
Sposób z konwersją na int przecież zadziała w obrębie jednej doby (24).
Przecież godziny to kolejne liczby po prostu - jedna większa od drugiej.
W przypadku przejścia na kolejny dzień czyli np. od 22:00 do 2:00 to po prostu warunek (jeśli większe od 22 lub mniejsze od 2).
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.