Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Przeniesienie sekund do minut, a minut do godzin
Forum PHP.pl > Forum > Przedszkole
Dominator
Mam skrypt wyświetlający różnicę pewnej daty do daty.
Wyświetlanie:
1 dzień, 22 godziny, 1327.9 minut, 79675 sekund.

Chciałbym zrobić tak, że jest maksymalnie 60 sekund, pozostałe sekundy przenosi do minut, natomiast minut jest maksymalnie 60, pozostałe minuty przenosi do godzin.

W ogóle czy jest możliwość takiego wykonania ?

Jeśli można to prosiłbym o nie dawanie mi gotowców, chciałbym aby ktoś mną nakierował co i jak smile.gif

  1. $vip = 1340890000;
  2. $pozostalo = $vip - time();
  3.  
  4.  
  5. $dni = ($vip/time());
  6. $godzin = ($pozostalo/60) / 60;
  7. $minut = ($pozostalo/60);
  8. $sekund = $pozostalo;
  9.  
  10. if($vip >= time())
  11. {
  12. echo "Do końca statusu VIP zostało Ci: ".round($dni,0)." dni, ".round($godzin,0)." godzin, ".round($minut,1)." minut, ".$sekund." sekund.";
  13. }
  14. else
  15. {
  16. echo "KONIEC VIPA";
  17. }
CTRL
Od wszystkich sekund odejmuj np. ilość minut * 60 sekund, i na końcu zostaną same sekundy, bez dni, godzin itp
peter13135
masz np. 123 sekundy

123 / 60 = 2 i reszty 3
czyli 2 minuty i 3 sekundy

jak by Ci wyszło np. 135 minut, to te minuty rozbijasz tak samo na 2 godziny i 15 minut.
Dominator
Jakoś mi nie wychodzi sad.gif
droslaw
  1. //godziny
  2. $hours = floor($seconds/3600);
  3. //teraz trzeba zapamiętać ile zostało sekund
  4. $secondsRemained = $seconds % 3600;
  5. //minuty tak jak godziny tylko bierzesz ile sekund pozostało nie całą wartość
  6. $minutes = floor($secondsRemained/60);
  7. $seconds = $secondsRemained % 60;


Z dniami powinieneś dać już sobie rade.
IProSoft
Nie chcesz gotowca więc zainteresuje się date_diff + date_format
Cały kod zmieści Ci się w trzech linijkach.
Dominator
Cytat(droslaw @ 28.06.2012, 11:47:27 ) *
  1. //godziny
  2. $hours = floor($seconds/3600);
  3. //teraz trzeba zapamiętać ile zostało sekund
  4. $secondsRemained = $seconds % 3600;
  5. //minuty tak jak godziny tylko bierzesz ile sekund pozostało nie całą wartość
  6. $minutes = floor($secondsRemained/60);
  7. $seconds = $secondsRemained % 60;


Z dniami powinieneś dać już sobie rade.


Zostało 500 sekund różnicy, a pokazuje, że nadal została jedna godzina ...

  1. <?php
  2. $vip = 1340887599;
  3. $pozostalo = $vip - time();
  4. $seconds = $pozostalo;
  5. $hours = floor($seconds/3600);
  6. //teraz trzeba zapamiętać ile zostało sekund
  7. $secondsRemained = $seconds % 3600;
  8. //minuty tak jak godziny tylko bierzesz ile sekund pozostało nie całą wartość
  9. $minutes = floor($secondsRemained/60);
  10. $seconds = $secondsRemained % 60;
  11.  
  12. echo $hours.":".$minutes.":".$seconds.":".$secondsRemained;
  13.  
  14. ?>
krzywy36
Coś Ty w podstawówce robił na matematyce? ohmy.gif Minuta ma 60 sekund, godzina ma 60 minut, gdzie tu filozofia? Masz jakąs ilość sekund, dzielisz to na 60, wychodzą minuty, a reszta to pozostałe sekundy. Minuty dzielisz znowu na 60, wychodzą godziny, a to co zostało to pozostałe minuty, koniec.
IProSoft
Z kodu wyżej, który liczy poprawnie:
  1. echo "Do końca statusu VIP zostało Ci: $hours godzin, $minutes minut, $seconds sekund.";

Lub inne rozwiązanie:
  1. $vip = 1340887599;
  2. $formatuj = date_diff( date_create(date("Y-m-d H:i:s", time())), date_create(date("Y-m-d H:i:s", $vip)));
  3. echo $formatuj->format("Do końca statusu VIP zostało Ci: %d dni, %H godzin, %i minut, %s sekund.");
Dominator
Cytat(IProSoft @ 28.06.2012, 13:48:11 ) *
Z kodu wyżej, który liczy poprawnie:
  1. echo "Do końca statusu VIP zostało Ci: $hours godzin, $minutes minut, $seconds sekund.";

Lub inne rozwiązanie:
  1. $vip = 1340887599;
  2. $formatuj = date_diff( date_create(date("Y-m-d H:i:s", time())), date_create(date("Y-m-d H:i:s", $vip)));
  3. echo $formatuj->format("Do końca statusu VIP zostało Ci: %d dni, %H godzin, %i minut, %s sekund.");


No to mam takie coś:

Fatal error: Call to undefined function date_diff() in /home/..
droslaw
Najlepsze rozwiązanie podał IProSoft, ale musisz mieć PHP 5.3.
IProSoft
Tutaj masz przykład:
http://www.if-not-true-then-false.com/2010...-or-timestamps/
Dominator
Dobrze, sam od podstaw napisałem własne rozwiązanie, które działa smile.gif

Jednakże uzyskuję na stronie wiadomość -> VIP kończy się za 0 godzin, 45.45 minut i 45 sekund

Przy minutach mam:

  1. round(($pozostalo/60),2);


I mam 2 miejsca po przecinku, jednakże gdy daję:

  1. round(($pozostalo/60),0);


To mam samo 45 minut, ale już nie mam pokazanych sekund, bo sekundy uzyskuję przez funkcje strstr i str_replace.

  1. <?php
  2. $vip = 1340888299;
  3. $pozostalo = $vip - time();
  4.  
  5. $minuty = round(($pozostalo/60),2);
  6. $sekundy = strstr($minuty, ".");
  7. $sekundy = str_replace(".", "", $sekundy);
  8. $godziny = floor($minuty/60);
  9.  
  10. echo "VIP kończy się za $godziny godzin, $minuty minut i $sekundy sekund";
  11.  
  12. ?>
IProSoft
  1. $vip = 1340888299;
  2. $pozostalo = $vip - time();
  3.  
  4. $minuty = floor($pozostalo/60);
  5. $sekundy = $pozostalo - $minuty * 60;
  6. $godziny = floor($minuty/60);
  7.  
  8. echo "VIP kończy się za $godziny godzin, $minuty minut i $sekundy sekund";
droslaw
Nie tak. Jeśli chcesz policzyć sekundy to wystarczy reszta z dzielenia $pozostalo % 60. Ale kiedy liczysz minuty musisz odjąć od $pozostalo czas jaki masz w godzinach.
Powiedzny że masz 3670 sekund;
sekundy: 3670 % 60 = 10 - prawidłowo
godziny: 3670 / 3600 ~= 1 - ma być 1 godzina
I teraz minuty, kiedy liczysz tak:
3670 / 60 wyjdzie Ci 61.
Musisz zapamiętać ile sekund już upchnąłeś w godziny, czyli reszta z dzielenia przez 3600. Ta reszta z dzielenia podzielona przez 60 da ilość minut.
Czyli tak jak podałem wyżej, tyle że nie wyświetlasz $secondsRemained bo to tylko zmienna pomocnicza.
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.