Dodawanie dni do daty

Odpowiedz Nowy wątek
2016-02-10 10:48
0

Witam,
Mam problem z dodawaniem dni do daty. Wszystko działa dobrze do momentu dojścia do daty: 2015-10-25. Ta data nie chce się dodać i powtarza się w nieskończoność.

Fragment kodu:

    function addDays($string, $days)
    {
        $u = strtotime($string);
        $sec = $days*86400;
        return date('Y-m-d', $u+$sec);
    }
    $data = '2015-10-22';

    for($i=1; $i<10; $i++)
    {
        $data = addDays($data, 1);
        echo $data.'<br>';
    }

Otrzymany efekt:

2015-10-23
2015-10-24
2015-10-25
2015-10-25
2015-10-25
2015-10-25
2015-10-25
2015-10-25
2015-10-25

Co robię nie tak ? Sprawdzając 2013 rok taki problem pojawia się przy dacie: 2013-10-27

Pozostało 580 znaków

2016-02-10 11:05

Zmiana czasu. Dodajesz 24 godziny, ale jeden dzień w roku ma 25 godzin. Wobec tego dostajesz tę samą datę, zaokrąglasz ją w dół do godziny zero (żeby mieć samą datę) i znowu próbujesz dodać 24 godziny.

W php jest tyle wbudowanych sposobów na operacje na datach, że tworzenie swojej własnej funkcji typu addDays czy innych "datowych" jest po prostu bez sensu.

Jeżeli jako tako ogarniasz obiekty to skorzystaj z klasy DateTime, a jak nie to np. mktime.

Rozbij datę startową na składowe (rok, miesiąc, dzień), a potem do dzień dodawaj coraz więcej (możesz wyjść poza zakres danego miesiąca, tj. jak podasz datę 32 stycznia to Ci zrobi 1 lutego).


edytowany 1x, ostatnio: dzek69, 2016-02-10 11:06

Pozostało 580 znaków

2016-02-10 13:19
1

Uzyj jak czlowiek obiektu DateTime i gotowych funkcji do tego :)


$date = new DateTime('2016-02-10');
$date->modify('+1 day');
echo $date->format('Y-m-d');

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0