Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Jak przerobić strtotime
Forum PHP.pl > Forum > Przedszkole
slawek3422
Witam.
Mam następujący problem. Otóż muszę policzyć jaki czas minął między dwoma godzinami no i nasuwa się od razu użycie strtotime jednak nie sprawdza mi się to tak jak bym chciał bo działa świetnie jeżeli operuje na pełnych godzinach ale jak już ma policzyć czas np od 12:10 do 18:19 to już jest problem, wyświetla 6,15 a w rzeczywistości jest 6h 9m. Da się go jakoś przerobić, żeby pokazywał w ten sposób: xh xm ?
  1. <?php
  2. $od = '12:10';
  3. $do = '18:19';
  4. echo (strtotime($do) - strtotime($od))/3600;
  5. ?>
nospor
Cytat
wyświetla 6,15 a w rzeczywistości jest 6h 9m
no bo przeciez jak dzielisz to otrzymujesz wynik w systemie dziesiętnym a nie godzinowym.... tongue.gif
zastanow sie przez chwile sam jak to "naprawic"
batman
Jestem pewien, że odpowiadałem na taki sam temat. Niestety nie mogę go teraz znaleźć:
  1. <?php
  2. echo date('H:i', (strtotime($do) - strtotime($od)));
  3. ?>
slawek3422
to co napisałeś już jest zadowalające, chociaż pokazuje o godzinę więcej niż powinno ale to już jakoś zmuszę do działania smile.gif
batman
I kolejny raz mam deja vu, ponieważ na to pytanie również odpowiadałem. Moją odpowiedzią było - u mnie działa. Ustaw strefę czasową i będzie po problemie.
wookieb
Pamiętaj o jednej ważnej rzeczy, że powyższy kod odlicza max 24 godziny. Potem bedziesz musial i tak dzielić wartość przez 3600 a reszta z dzielenia będzie ilością sekund która po podzieleniu przez 60 otrzymasz liczbę minut. Metoda bardziej uniwersalna. I bodajże nawet szybsza.

// DOWN Zakładam warunek ze czasem poda jeszcze dzień poza godziną.
batman
Cytat(wookieb @ 10.06.2009, 10:04:31 ) *
Pamiętaj o jednej ważnej rzeczy, że datę liczy ci godziny max do 24. Potem bedziesz musial i tak dzielić wartość przez 3600 a reszta z dzielenia będzie ilością sekund która po podzieleniu przez 60 otrzymasz liczbę minut.
Co?
  1. <?php
  2. $od = '12:00';
  3. $do = '10:00';
  4. echo date('H:i', (strtotime($do) - strtotime($od)));
  5. ?>
To zwróci 22:00, czyli tyle ile powinno.
slawek3422
@ batman
zamiast date zastosowałem gmdate smile.gif i działa, wielkie dzięki za pomoc

chociaż wookieb miał rację, wszystko działa w obrębie jednego dnia, jak pojawi się różnica powyżej 24h to to już nie działa ale już to jakoś opanuję

ostatecznie przerobiłem to w ten sposób:
  1. <?php
  2. $od = '12:10';
  3. $do = '12:15';
  4. $sekundy = (strtotime($do) - strtotime($od));
  5. $reszta = $sekundy % 7200;
  6. $pelne_godziny = ($sekundy - $reszta) / 3600;
  7. $minuty = $reszta / 60;
  8. echo $pelne_godziny ."h&nbsp;". $minuty ."m";
  9. ?>


  1. <?php
  2. $od = '2009-10-10 12:10';
  3. $do = '2009-10-11 12:15';
  4. $sekundy = (strtotime($do) - strtotime($od));
  5. $reszta = $sekundy % 7200;
  6. $pelne_godziny = ($sekundy - $reszta) / 3600;
  7. $minuty = $reszta / 60;
  8. echo $pelne_godziny ."h&nbsp;". $minuty ."m";
  9. ?>


i obydwa przypadki działają smile.gif
wookieb
Masz mały błąd.
Zobacz
  1. <?php
  2. $od = '2009-10-10 12:10';
  3. $do = '2009-10-11 12:00';
  4. ?>


naprawa polega na zamianie 7200 na 3600.Nie wiem czemu wziales 7200 :/
slawek3422
no tak smile.gif powinno byc:
  1. <?php
  2. $reszta = $sekundy % 3600;
  3. ?>
wookieb
A nie sprawdziłeś tego co ci mówiłem...
  1. <?php
  2. $od = '2009-10-10 12:10';
  3. $do = '2009-10-11 12:00';
  4. $sekundy = (strtotime($do) - strtotime($od));
  5. $reszta = $sekundy % 7200;
  6. $pelne_godziny = ($sekundy - $reszta) / 3600;
  7. $minuty = $reszta / 60;
  8. echo $pelne_godziny ."h&nbsp;". $minuty ."m";
  9. ?>

Wynik:22h 110m

Wydaje mi się, że u ciebie jest tak samo bo raczej nie powinno być tutaj problemu ze strefą czasową.
// EDIT Wyedytowałeś post smile.gif
slawek3422
sprawdziłem, był błąd ale post wcześniej go naprawiłem smile.gif
  1. <?php
  2. $od = '2009-10-10 12:10';
  3. $do = '2009-10-11 12:00';
  4. $sekundy = (strtotime($do) - strtotime($od));
  5. $reszta = $sekundy % 3600;
  6. $pelne_godziny = ($sekundy - $reszta) / 3600;
  7. $minuty = $reszta / 60;
  8. echo $pelne_godziny ."h&nbsp;". $minuty ."m";
  9. ?>



23h 50m
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.