Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: odejmowanie dat i pożądany wynik
Forum PHP.pl > Forum > PHP
Apo
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.
devnul
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
Apo
Cytat
wystarczy sprawdzać ile razy najwieksza jednostka ( w sekundach ) jaka cię interesuje mieści się w twojej wartości

moglbys to bardziej rozwinac winksmiley.jpg
erix
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...
Apo
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 ;/
shield
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
erix
shield, sory, machnalem sie...
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.