Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Jak przerobić strtotime
slawek3422
post 10.06.2009, 08:36:15
Post #1





Grupa: Zarejestrowani
Postów: 142
Pomógł: 7
Dołączył: 3.08.2007
Skąd: śląsk

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


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. ?>
Go to the top of the page
+Quote Post
nospor
post 10.06.2009, 08:38:37
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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"


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
batman
post 10.06.2009, 08:39:25
Post #3





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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. ?>


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
slawek3422
post 10.06.2009, 08:44:41
Post #4





Grupa: Zarejestrowani
Postów: 142
Pomógł: 7
Dołączył: 3.08.2007
Skąd: śląsk

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


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
Go to the top of the page
+Quote Post
batman
post 10.06.2009, 08:49:47
Post #5





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
wookieb
post 10.06.2009, 09:04:31
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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ą.

Ten post edytował wookieb 10.06.2009, 09:28:01


--------------------
Go to the top of the page
+Quote Post
batman
post 10.06.2009, 09:12:04
Post #7





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
slawek3422
post 10.06.2009, 10:31:52
Post #8





Grupa: Zarejestrowani
Postów: 142
Pomógł: 7
Dołączył: 3.08.2007
Skąd: śląsk

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


@ 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

Ten post edytował slawek3422 10.06.2009, 10:32:58
Go to the top of the page
+Quote Post
wookieb
post 10.06.2009, 10:38:43
Post #9





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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 :/


--------------------
Go to the top of the page
+Quote Post
slawek3422
post 10.06.2009, 10:46:51
Post #10





Grupa: Zarejestrowani
Postów: 142
Pomógł: 7
Dołączył: 3.08.2007
Skąd: śląsk

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


no tak smile.gif powinno byc:
  1. <?php
  2. $reszta = $sekundy % 3600;
  3. ?>


Ten post edytował slawek3422 10.06.2009, 10:47:08
Go to the top of the page
+Quote Post
wookieb
post 10.06.2009, 10:48:06
Post #11





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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

Ten post edytował wookieb 10.06.2009, 10:52:46


--------------------
Go to the top of the page
+Quote Post
slawek3422
post 10.06.2009, 10:49:40
Post #12





Grupa: Zarejestrowani
Postów: 142
Pomógł: 7
Dołączył: 3.08.2007
Skąd: śląsk

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


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

Ten post edytował slawek3422 10.06.2009, 10:50:21
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 - 05:08