Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Przeniesienie sekund do minut, a minut do godzin
Dominator
post 27.06.2012, 16:24:26
Post #1





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


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


Ten post edytował Dominator 27.06.2012, 16:25:48
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
CTRL
post 27.06.2012, 16:39:09
Post #2





Grupa: Zarejestrowani
Postów: 133
Pomógł: 8
Dołączył: 23.09.2011
Skąd: Stromiec

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


Od wszystkich sekund odejmuj np. ilość minut * 60 sekund, i na końcu zostaną same sekundy, bez dni, godzin itp


--------------------
Go to the top of the page
+Quote Post
peter13135
post 27.06.2012, 17:21:02
Post #3





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


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.


--------------------
:)
Go to the top of the page
+Quote Post
Dominator
post 28.06.2012, 10:29:39
Post #4





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Jakoś mi nie wychodzi sad.gif
Go to the top of the page
+Quote Post
droslaw
post 28.06.2012, 10:47:27
Post #5





Grupa: Zarejestrowani
Postów: 98
Pomógł: 33
Dołączył: 10.05.2011
Skąd: Krak

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


  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.

Ten post edytował droslaw 28.06.2012, 10:50:22
Go to the top of the page
+Quote Post
IProSoft
post 28.06.2012, 10:57:11
Post #6





Grupa: Zarejestrowani
Postów: 479
Pomógł: 97
Dołączył: 6.09.2011
Skąd: php.net :)

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


Nie chcesz gotowca więc zainteresuje się date_diff + date_format
Cały kod zmieści Ci się w trzech linijkach.

Ten post edytował IProSoft 28.06.2012, 10:57:50


--------------------
Manual prawdę Ci powie.
Go to the top of the page
+Quote Post
Dominator
post 28.06.2012, 12:35:41
Post #7





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


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


Ten post edytował Dominator 28.06.2012, 12:35:52
Go to the top of the page
+Quote Post
krzywy36
post 28.06.2012, 12:41:35
Post #8





Grupa: Zarejestrowani
Postów: 370
Pomógł: 43
Dołączył: 1.12.2007
Skąd: Kędzierzyn Koźle

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


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.


--------------------
pretty as a shit.
Go to the top of the page
+Quote Post
IProSoft
post 28.06.2012, 12:48:11
Post #9





Grupa: Zarejestrowani
Postów: 479
Pomógł: 97
Dołączył: 6.09.2011
Skąd: php.net :)

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


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.");


--------------------
Manual prawdę Ci powie.
Go to the top of the page
+Quote Post
Dominator
post 28.06.2012, 12:53:44
Post #10





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


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/..
Go to the top of the page
+Quote Post
droslaw
post 28.06.2012, 12:57:13
Post #11





Grupa: Zarejestrowani
Postów: 98
Pomógł: 33
Dołączył: 10.05.2011
Skąd: Krak

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


Najlepsze rozwiązanie podał IProSoft, ale musisz mieć PHP 5.3.
Go to the top of the page
+Quote Post
IProSoft
post 28.06.2012, 13:07:00
Post #12





Grupa: Zarejestrowani
Postów: 479
Pomógł: 97
Dołączył: 6.09.2011
Skąd: php.net :)

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


Tutaj masz przykład:
http://www.if-not-true-then-false.com/2010...-or-timestamps/


--------------------
Manual prawdę Ci powie.
Go to the top of the page
+Quote Post
Dominator
post 28.06.2012, 13:16:22
Post #13





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


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. ?>
Go to the top of the page
+Quote Post
IProSoft
post 28.06.2012, 13:36:57
Post #14





Grupa: Zarejestrowani
Postów: 479
Pomógł: 97
Dołączył: 6.09.2011
Skąd: php.net :)

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


  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";


--------------------
Manual prawdę Ci powie.
Go to the top of the page
+Quote Post
droslaw
post 28.06.2012, 13:45:03
Post #15





Grupa: Zarejestrowani
Postów: 98
Pomógł: 33
Dołączył: 10.05.2011
Skąd: Krak

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


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.

Ten post edytował droslaw 28.06.2012, 13:49:13
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: 19.07.2025 - 02:33