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 October
i 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 № 1To 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.