Dodawanie dni do daty

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

1

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).

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');

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