Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] dziwne zachowanie strtotime()
Mikan
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 1.05.2006

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


Witam!
napisałem kod, który ma sprawdzać aktywność użytkowników, mam jednak problem z konwersją czasu.
  1. <?php
  2. require_once ('funkcje/polacz_baza.php');
  3. polacz_baza('users');
  4. // pobieranie zmiennych z sesji
  5. require_once ('funkcje/tworz_zmienne.php');
  6.  
  7. //Uptade aktywności usera
  8.  
  9.  
  10. $data = date('Y-m-d H:m:s');
  11. mysql_query('UPDATE dane_postaci SET aktywnosc="'.$data.'" WHERE id_log='.$id.'') or die ('Nie można zaaktualziować czasu ostatniej aktywności!');
  12.  
  13. //pobranie userow znajdujacych sie w tym samym miejscu
  14. $query = 'SELECT aktywnosc, id_log FROM dane_postaci WHERE miejsce="'.$miejsce.'"';
  15. $wynik = mysql_query($query) or die ('Nie można pobrać danych z db');
  16. $licz_wiersze = mysql_num_rows($wynik);
  17.  
  18. //Jeśli nikogo nie ma...
  19. if ($licz_wiersze != 0)
  20. {
  21. //pętla zwracajaca nazwy userów
  22. for ($i=0; $i<$licz_wiersze; $i++)
  23. {
  24. //TU GDZIES JEST PROBLEM
  25. $wiersz = mysql_fetch_assoc($wynik);
  26. echo('<br /> aktywnosc z db'.$wiersz['aktywnosc']);
  27. echo('<br /> czas aktualny'.$data);
  28. $aktywnosc = strtotime($wiersz['aktywnosc']);
  29. $aktualny = time();
  30. $roznica = $aktualny - $aktywnosc;
  31. echo ('<br /> aktywnosc '.$aktywnosc);
  32. echo('<br /> aktualny'.$aktualny);
  33. echo ('<br />roznica '.$roznica);
  34. $sekundy = $roznica%60;
  35. $minuty_1 = $roznica - $sekundy;
  36. $minuty = $minuty_1/60;
  37. echo ('<br />sek '.$sekundy);
  38. echo ('<br />min '.$minuty);
  39.  
  40. //sprawdzanie czasu aktywnosci
  41. if ($minuty<30)
  42. {
  43. $query2 = 'SELECT login FROM logowanie WHERE id='.$wiersz['id_log'];
  44. $wynik2 = mysql_query($query2) or die ('Nie można pobrać danych2 z db');
  45. $user = mysql_fetch_row($wynik2);
  46.  
  47. echo ('<p>'.$user[0].' aktywny ostatnio: '.$minuty.'minut temu i '.$sekundy.' sekund temu.');
  48.  
  49. }
  50. }
  51. }
  52. else
  53. {
  54. echo ('Nikogo tu nie ma');
  55. break;
  56. }
  57. ?>


Jak widać skrypt aktualizuje czas aktywności do aktualnej daty, po czym sprawdza każdemu userowi czas aktywności i jeśli jest krótszy niż 30 minut, wyświetla go.
problem w tym, że timestamp daty zaktualizowanej na czas aktualny (pobieranej z mysql'a) jest rożny od timestampa aktualnej daty(generowanej przez php), mimo że data pobrana z MySql wyświetlona w zwykłym formacie jest taka sama jak ta aktualna.

Najlepiej chyba pokazuje to tekst który zwraca skrypt:

Cytat
aktywnosc z db2007-11-21 19:11:22
czas aktualny2007-11-21 19:11:22
aktywnosc 1195668682
aktualny1195668982
roznica 300
sek 0
min 5


Ten post edytował Mikan 21.11.2007, 20:01:34
Go to the top of the page
+Quote Post

Posty w temacie


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 Aktualny czas: 20.08.2025 - 14:18