Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: mktime
Forum PHP.pl > Forum > PHP
Lolek
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
hmm.... dziwne, sprawdzę to u siebie w domq (teraz jestem w szkole)
KaMeLeOn
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
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
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
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
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
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
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.