Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] dziwne zachowanie strtotime()
Forum PHP.pl > Forum > PHP
Mikan
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
sf
Używaj znaczników bb PHP, a nie CODE bo nic nie widać!
nevt
Błąd jest na samym początku...

$data = date('Y-m-d H:m:s');

Widzisz? raz masz 'm' jako miesiące... a zaraz masz 'm' jako minuty...
powinno być:

$data = date('Y-m-d H:i:s');

powodzenia ;)
Mikan
wstydnis.gif

No tak... nie zawsze "m" musi znaczyć minutes...

wielkie dzięki winksmiley.jpg
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.