Lolek
13.06.2003, 12:10:32
Byłbym wdzięczny za pomoc, jeśli ktoś z Was się z czymś takim spotkał:
Mam napisać skrypt liczący ilość dni pomiędzy datami (daty po 1970). Użyłem funkcji mktime :
[php:1:132b076db3]<?php
$data1=mktime(0,0,0,$mc1,$dzien1,$rok1);
$data2=mktime(0,0,0,$mc2,$dzien2,$rok2);
$ile_dni=($data2-$data1)/(60*60*24);
?>[/php:1:132b076db3]
Wszystko byłoby dobrze, gdyby nie to, że licząc dni pomiędzy niektórymi datami otrzymuję liczby z wartościami po przecinku.
Np. pomiędzy 2003-11-15 a 2003-10-01 jest 45.041666666667 dni.
Dlaczego? Czy w mktime jest błąd?
konrad_vme
13.06.2003, 12:17:37
hmm.... dziwne, sprawdzę to u siebie w domq (teraz jestem w szkole)
KaMeLeOn
13.06.2003, 14:26:33
Cytat
Dlaczego? Czy w mktime jest błąd?
W żadnym wypadku nie...
[php:1:c44be4f614]<?php
$ile_dni=($data2-$data1)/(60*60*24);
?>[/php:1:c44be4f614]
Zastanów się nad tym dzieleniem, najlepiej z kalkulatorem w ręku...
Lolek
15.06.2003, 20:21:38
Cytat
Zastanów się nad tym dzieleniem, najlepiej z kalkulatorem w ręku...
Zastanowiłem się, ale albo mam taką zaćmę, albo ten kalkulator tu nie pomoże...
(Różnica dni pomiędzy np. '2003-9-15' a '2003-8-1' to równe 45 wg takiego liczenia j/w podałem. Ale pomiędzy datami z mojego pierwszego przykładu nadal jest 45 z hakiem).
Cudi
15.06.2003, 21:22:27
Jak widać nie jest to równa liczba, i raczej napewno nie jest to błąd mktime(); Wychodzi tak a nie inaczej, a wynik trzeba po prostu zaokrąglić i jest po sprawie.
Lolek
16.06.2003, 09:05:57
No, cóż...
Zależy mi na niezawodności liczenia, dlatego zaokrąglanie nie wchodzi w grę.
Możnaby użyć do tego liczenia MySql
Cytat
"select (to_days("$data2") - to_days("$data1"))";
bo liczy bez ułamków, ale to trochę głupie łączyć się z bazą tylko dla uzyskania banalnej różnicy między datami.
kurtz
16.06.2003, 11:19:59
Cytat
Czy w mktime jest błąd?
nie ;) po prostu w nocy ok 26 byl przestawiany czas z letniego na zimowy wiec dzien sie lekko wydluzyl (o dodatkowa godizne ktora dostales po przecinku).
aby obliczac faktyczna roznice pomiedzy datami korzystaj wiec z gmmktime() ktore zwraca czasy w GMT (czyli bez uzglednianai stref czasowych).
pozdrawiam
Lolek
16.06.2003, 14:35:31
Kurtz! Dzięki!!! Twoja odpowiedź przywróciła mi jasność umysłu. Aż mi głupio, że zadałem takie bzdurnym pytanie. Wystarczyło dokładnie przeczytać opis funkcji.
Wszedłem na stronę
http://pl.php.net/manual/pl/function.mktime.php i widzę z opisu funkcji, że zapomniałem o ostatnim jej opcjonalnym argumencie: "letni/zimowy".
Przetestuję, co jest dla mnie wygodniejsze gmmktime, czy mktime.
pozdrawiam