Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> odejmowanie dat i pożądany wynik
Apo
post
Post #1





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

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


Witam
Chciałem się dowiedzieć jak najwydajnij zrobić takie coś że:
Skrypt zapisuje do pliku date ostatniej wizyty usera w postaci time().
Następnie na stronie jest wyciagany czas z pliku i odejmuje te czasy:
  1. <?php
  2. time() - time_z_pliku
  3. ?>

i teraz chcialem aby ta roznica byla wyswietlona w takiej formie:
uzytkownik xxx byl tu ostatnio 2dni 14godzin i 5minut temu, a jeśli np byl tu ostatnio mniej niz wczoraj to:
... 9 godzin i 4 minuty. No i prosilbym o wasze rady jak to najwydajniej zrobic.
Z gory wielkie THX.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
devnul
post
Post #2





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

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


funkcja time() zwraca czas w sekundach od 1 stycznia 1970, odejmując 2 wartości uzyskujesz liczbe sekund od ostatniej wizyty, wystarczy sprawdzać ile razy najwieksza jednostka ( w sekundach ) jaka cię interesuje mieści się w twojej wartości
Go to the top of the page
+Quote Post
Apo
post
Post #3





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

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


Cytat
wystarczy sprawdzać ile razy najwieksza jednostka ( w sekundach ) jaka cię interesuje mieści się w twojej wartości

moglbys to bardziej rozwinac (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




matematyka:
dzielisz to, co wyjdzie przez 60 i zaokraglasz w dol (ceil). Wyjdzie Ci w sekundach. Potem dzielisz na 60 i znowu to samo, to wyjdzie w godzinach.

Dzielisz ile Ci pasi przez odpowiednia liczbe, odcinasz po przecinku (inaczej: zaokraglasz w dol) itd...
Go to the top of the page
+Quote Post
Apo
post
Post #5





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

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


Na dzisiejszy mam takie cos:
  1. <?php
  2. $this->tmp = '';
  3. $czas = time()-$user['last_visit'];
  4. if(($czas/(3600*24)) >= 1)
  5. {
  6. $this->tmp .= ceil(($czas/(3600*24))).' dni '; // od tąd
  7. if(($czas%(3600*24)) >= 1)
  8. {
  9. $this->tmp .= ceil(($czas%(3600*24))).' godzin[y] ';
  10. }
  11. if(($czas/60) >= 1)
  12. {
  13. $this->tmp .= ceil(($czas/60)).' minut temu';
  14. } //do tąd
  15. }
  16. elseif(($czas/3600) >= 1)
  17. {
  18. $this->tmp .= ceil(($czas/3600)).' godzin[y] ';
  19. if(($czas/60) >= 2)
  20. {
  21. $this->tmp .= ceil(($czas/60)).' minut temu';
  22. }
  23. }
  24. else
  25. {
  26. $this->tmp .= ceil(($czas/60)).' minut temu';
  27. }
  28.  
  29. $this->privmsg('Uzytkownik byl tu ostatnio '.$this->tmp);
  30. ?>

Ale mam problem z obliczaniem reszty godzin z dni. Mianowicie skrypt odejmuje od aktualnej daty, date z bazy i następnie dzieli przez 3600*24 dzieki czemu otrzymuje ilosc dni ostatniej wizyty. No i teraz chcialem aby z reszty co zostala po ilosci dnie obliczyl ilosc godzin zeby nie przekroczyla 24h ale nie umie wpasc jak to napisac ;/
Go to the top of the page
+Quote Post
shield
post
Post #6





Grupa: Zarejestrowani
Postów: 15
Pomógł: 2
Dołączył: 29.06.2005

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


Po pierwsze to ktos Ci zle podpowiedzial. Do zaokragladania w dol sluzy floor a nie ceil.

To co chcesz uzyskac mozesz zrobic w taki sposob:
  1. <?php
  2.  
  3. $dzien = floor( $czas/ (3600*24) );
  4. $czas -= $dzien*3600*24;
  5.  
  6. $godzina = floor( $czas/3600 );
  7. $czas -= $godzina*3600;
  8.  
  9. $minuta = floor( $czas/60 );
  10.  
  11. ?>


greets
Go to the top of the page
+Quote Post
erix
post
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




shield, sory, machnalem sie...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 18:55