![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 13.06.2003 Skąd: Chorzów Ostrzeżenie: (0%) ![]() ![]() |
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? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 51 Pomógł: 0 Dołączył: 19.04.2002 Skąd: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
hmm.... dziwne, sprawdzę to u siebie w domq (teraz jestem w szkole)
-------------------- revolution, the only solution
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 680 Pomógł: 0 Dołączył: 1.10.2002 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
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... -------------------- "Czerp z innych, ale nie kopiuj ich. Bądź sobą." Michel Quoist
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 13.06.2003 Skąd: Chorzów Ostrzeżenie: (0%) ![]() ![]() |
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). |
|
|
![]()
Post
#5
|
|
![]() Administrator planeta/IRC Grupa: Przyjaciele php.pl Postów: 385 Pomógł: 0 Dołączył: 19.04.2003 Skąd: Zabrze Ostrzeżenie: (0%) ![]() ![]() |
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.
-------------------- "Programmers are in a race with the Universe to create bigger and better idiot-proof programs, while the Universe is trying to create bigger and better idiots. So far the Universe is winning."
Cudi's devBlog |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 13.06.2003 Skąd: Chorzów Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]()
Post
#7
|
|
![]() Grupa: Przyjaciele php.pl Postów: 786 Pomógł: 0 Dołączył: 18.03.2002 Skąd: Wroclaw/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
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 -------------------- .. make web your home ..
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 13.06.2003 Skąd: Chorzów Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 12.06.2025 - 19:33 |