Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] mktime wczoraj i dzis
Forum PHP.pl > Forum > PHP
Lejto
Mam kod który pokazuje sprawdziany ile dziś ile jutro. Korzystałem z mktime dzien miesiac rok przy dodawaniu i potem porównywałem lecz coś mi to nie działa dobrze.
Oto kod:
  1.  
  2. $rok = date("Y");
  3. $miech = date("n")+1;
  4. $miesiac = date("m");
  5. $dzien = date("d");
  6.  
  7.  
  8.  
  9. $ostatni = mktime (0,0,0,$miech,0,$rok);
  10. $miesiac = strftime ("%d", $ostatni);
  11.  
  12. $ostatni_tyg = mktime (0,0,0,$miech,$dzien,$rok);
  13. $tydzien = strftime ("%c", $ostatni_tyg);
  14.  
  15. $m = time()+(24*$miesiac*3600);
  16. $dzis = time(24*3600);
  17. $jutro = time()+(24*3600);
  18.  
  19.  
  20. $zapyt = $db->query("select * from sprawdziany where czas<$m");
  21. $ile = $zapyt->num_rows;
  22. $zapyt = $db->query("select czas from sprawdziany where czas > $dzis");
  23. $dzisiaj = $zapyt->num_rows;
  24.  
  25. $data1 = mktime(0,0,0,0, date('d')-7, date('Y'));
  26.  
  27.  
  28. $zapyt = $db->query("select czas from sprawdziany where czas<$jutro");
  29. $jutro = $zapyt->num_rows;
  30.  
  31. $zapyt = $db->query("select czas from sprawdziany where czas>$data1");
  32. $tydz = $zapyt->num_rows;
  33.  
  34.  
  35.  
  36. echo "Lcznie: $rows<br>";
  37. echo "W tym miecicu: $ile";
  38. echo "<br>";
  39. echo "Dzisiaj: $dzisiaj";
  40. echo "<br>Jutro: $jutro";


Pozdrawiam

nie da się tego rozwiązać?
// "jutro" udało mi się zrobić jeszcze pozostaje dziś i w tym miesiącu
Kasyx
dzisiaj uzyskasz z
  1. $dzis = mktime (0,0,0,$miech,$dzien,$rok);


natomiast dany miesiac z
  1. $miesiac = mktime (0,0,0,$miech,1,$rok);


jak porównasz te wartości liczbowe to powinno działać
Lejto
ja tu się trudzę kombinuje obliczam ile dni do kończą miesiąca a tu wystarczyła prosta reguła sciana.gif sciana.gif
robiłem podobnie ale w mktime jak dziś miał zmienną i chyba dlatego
a jak jeszcze wyświetlić w tym tygodniu?
pomnożyć godziny i tydzień i odjąć od time?
Kocurro
Witam,

Wydaje mi się kolega, że źle trochę kombinujesz.

Po pierwsze - operacje na datach zawrzyj w zapytaniu, tak będzie lepiej, baza danych jest sprawniejsza w tego typu operacjach.
Po drugie - jeśli chcesz pobrać ilość np. w tym tygodniu to musisz zawężać przedział od dołu i od góry a nie tylko z jednej strony.

Na razie może Ci działa ale jak będzie więcej danych to zauważysz błędy.

Na szybko:

Ten tydzień:
  1. SELECT COUNT(*) AS `ilosc` FROM`sprawdziany` WHERE YEARWEEK(`czas`) = YEARWEEK(CURRENT_DATE);


Zeszły tydzień:
  1. SELECT COUNT(*) AS `ilosc` FROM`sprawdziany` WHERE YEARWEEK(`czas`) = YEARWEEK(CURRENT_DATE - INTERVAL 7 DAY);


Zeszły miesiąc:
  1. SELECT COUNT(*) AS `ilosc` FROM `sprawdziany` WHERE SUBSTRING(`czas` FROM 1 FOR 7) = SUBSTRING(CURRENT_DATE - INTERVAL 1 MONTH FROM 1 FOR 7);


To takie zapytania na szybko / przykładowo. Napisz dokładniej co potrzebujesz smile.gif

I uwaga na przyszłość - na bazę danych najlepiej ile tylko się da, ona ma wbudowane mechanizmy cache'owania itp. Dzięki temu można bardzo przyśpieszyć aplikację jeśli tylko się mądrze z bazy danych korzysta.

Pozdrawiam,
Łukasz

-- edit --

Zapytania mogą nie dawać wyników idealnych a to dlatego, że baza danych może mieć źle locale skonfigurowane.
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.