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:
date_default_timezone_set('GMT');
$przyszla = mktime(21
, 4
, 54
, 3
, 3
, 2010
); // godzina, minuta, sekunda, miesiac, dzien, rok $dobra = $przyszla - $date;
$dni = date('z', $dobra); $godziny = date('H', $dobra); $minuty = date('i', $dobra); $sekundy = date('s', $dobra); echo "$dni dni, $godziny godzin, $minuty minut, $sekundy sekund"; if ($dobra < 0) {
// przeszlosc
} else {
if ($dni) {
// wiecej niz jeden dzien
} else {
if ($godziny) {
// wiecej niz godzina
} else {
if ($minuty) {
// wiecej niz minuta
} else {
// mniej niz minuta
}
}
}
}
Zdaję sobie sprawę, że trzykrotnie zagnieżdżony if nie jest najpiękniejszym kodem na świecie, ale działa jak trzeba.