/ / Data PHP zwiększa błąd - php, data, przyrost

Błąd zwiększania daty PHP - php, date, increment

Próbuję utworzyć kalendarz, w którym data się zwiększa, a każda data jest klikalna, co prowadzi do wyszukiwania. Dziwna część polega na tym, że data się kończy 25th Octoberi przestaje zwiększać. to znaczy 24th, 25th, 25th, 25th...

Nie ma znaczenia, w którym dniu kalendarz się rozpoczął (gapił się na niego przez kilka dni), ale o 25th it stops incrementing.

Wdzięczny za każdą radę (druga część po przerwie jest prawdopodobnie nieistotna, ale w przypadku, gdyby mógł istnieć jakiś link)

for ($i = 1; $i <= 30; $i++){
$date = date("d-m-Y", strtotime($date) + 86400);
array_push($array_date, $date);
$separatedate = explode("-", $date);
$getday = date("l", strtotime($date));
print "<button class="submitsearch btn" value=$array_date[$i]>" . ltrim($separatedate[0], "0") . "<br>" . $getday . "<br></button>";

if (!checkdate($separatedate[1] , $separatedate[0]+1 , $separatedate[2])) {
$nextmonth = date("F", strtotime($date) + 86400);
print "<strong>". $nextmonth . "</strong><hr/>";
}
}

Odpowiedzi:

3 dla odpowiedzi № 1

To jest problem:

$date = date("d-m-Y", strtotime($date) + 86400);

Wydaje się, że polegasz na tym, aby zwiększyć datę. Zwykle będzie dobrze ... ale nie ma 25-godzinnego dnia ze względu na zmiany czasu letniego.

Proponuję użyć funkcji arytmetycznych daty / czasu (np. date_add) zaprojektowane tak, aby dodać dzień, zamiast dodawać 24 godziny. Lub upewnij się wszystko arytmetyka jest wykonywana w UTC, która nie miała żadnejzmiany strefy czasowej. Ogólnie rzecz biorąc, starałbym się unikać wykonywania większej liczby konwersji łańcuchów niż naprawdę potrzebujesz: zachować zmienną reprezentującą datę / czas w sposób idiomatyczny i wykonać na niej arytmetykę - wtedy tylko format ta zmienna, kiedy trzeba. Nie widzę potrzeby dzwonienia strtotime wszędzie, jeśli zrobisz to dobrze.