Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]mktime
Forum PHP.pl > Forum > Przedszkole
micha12344
witam
otóż mam taki skrypt ktoremu najpierw daje przyszłą datę, date aktualna sam sobie bierze , na koncu zwraca roznice ale w dziwnej skladni...jak to zamienic na normalny czas aby pokazywal dni godziny sekundy?
oto moj skrypt::

$przyszla= 1267650294;
$date= mktime("Y-m-d H:i:s");
$dobra=$przyszla-$date;
echo $dobra;
Fifi209
Zwraca liczbę sekund zapewne...

  1.  
  2. // Godziny
  3. $h = floor($dobra/3600);
  4. $dobra -= $h*3600;
  5.  
  6. // Minuty
  7. $m = floor($dobra/60);
  8. $dobra -= $m*60;
  9.  
  10. // Sekundy
  11. $dobra
micha12344
ok wszystko dziala wielkie dzieki:)
CODE
$przyszla= 1267650294;
$date= mktime("Y-m-d H:i:s");
$dobra=$przyszla-$date;


if(isset($dobra))

{

if($dobra/89400 >= 1)

{

echo intval($dobra/86400)." dni";

}

else if($dobra/3600 >= 1)

{

echo intval($dobra/3600)." godz.";

}

else if($dobra/60 >= 1)

{

echo intval($dobra/60)." min.";

}

else if($dobra >= 1 AND $dobra < 60)

{

echo "poniżej minuty";

}

else if($dobra <= 0);

a to mi jeszcze wpadlo do glowy przez kolegę i proszę pomózcie mi to udoskonalic....
Virus_PL
Po pierwsze, uporządkuj składnię. Klamry nie potrzebują po wolnej linii nad sobą i pod sobą, od tego są tabulatory. Niech zgadnę, piszesz w Notepadzie?
Po drugie, mktime() nie działa w ten sposób. Od tego jest funkcja strtotime(). Składnia mktime() poniżej w moim kawałku kodu.
Po trzecie, nie ma sensu ciągle dzielić sekund, skoro mamy funkcję date(). Co prawda z zwraca dzień w roku od 0 do 365, czyli nie będzie działało gdy dni jest więcej niż 365, ale przypuszczam że aż tyle nie będzie potrzebne. W ostateczności można wtedy zrobić floor($dobra / 86400).
A oto mój kod:

  1. date_default_timezone_set('GMT');
  2. $przyszla = mktime(21, 4, 54, 3, 3, 2010); // godzina, minuta, sekunda, miesiac, dzien, rok
  3. $date = strtotime(date("Y-m-d H:i:s"));
  4. $dobra = $przyszla - $date;
  5. $dni = date('z', $dobra);
  6. $godziny = date('H', $dobra);
  7. $minuty = date('i', $dobra);
  8. $sekundy = date('s', $dobra);
  9. echo "$dni dni, $godziny godzin, $minuty minut, $sekundy sekund";
  10. if ($dobra < 0) {
  11. // przeszlosc
  12. } else {
  13. if ($dni) {
  14. // wiecej niz jeden dzien
  15. } else {
  16. if ($godziny) {
  17. // wiecej niz godzina
  18. } else {
  19. if ($minuty) {
  20. // wiecej niz minuta
  21. } else {
  22. // mniej niz minuta
  23. }
  24. }
  25. }
  26. }


Zdaję sobie sprawę, że trzykrotnie zagnieżdżony if nie jest najpiękniejszym kodem na świecie, ale działa jak trzeba.
Fifi209
Cytat(micha12344 @ 5.02.2010, 22:08:09 ) *
a to mi jeszcze wpadlo do glowy przez kolegę i proszę pomózcie mi to udoskonalic....

Wystarczy, że w moim kodzie przed:
  1. // Godziny
  2. $h = floor($dobra/3600);
  3. $dobra -= $h*3600;


Dasz:
  1. // Dni
  2. $days = floor($dobra/3600*24);
  3. $dobra -= $days*3600*24;
micha12344
dzieki wszystkim oba przyklady są bardzo dobre. czarodziej.gif
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.