Я пишу веб-приложение на основе календаря и работаю над кодом, который зациклится X раз и определит даты и время начала / окончания будущих событий.Каждое событие имеет начальную дату / время и конечную дату / время. Цикл прекрасно работает до 2037 года, после чего цикл работает должным образом.Преобразование никогда не происходит и возвращает мои даты назад к 1969 году. Пожалуйста, смотрите код и вывод ниже.Может кто-нибудь сказать мне, почему это происходит?
Live Пример проблемного поведения: http://codepad.org/h5ET3h2O
$date1 = strtotime('August 17 2011 8:00 AM');
for ($x=1; $x<=$repeatTimes; $x++){
echo date('m/d/Y g:i A', $date1)."<br><br>".$date1 ." +". $repeatFreq." ".$repeatUnit. " = ";
$date1 = strtotime(date('m/d/Y g:i A', $date1) . " +".$repeatFreq." ".$repeatUnit );
echo $date1."<br /><br />";
}
Вывод
08/15/2011 8:00 AM
1313409600 +1 Year = 1345032000
08/15/2012 8:00 AM
1345032000 +1 Year = 1376568000
08/15/2013 8:00 AM
1376568000 +1 Year = 1408104000
//Some Left Out
08/15/2036 8:00 AM
2102414400 +1 Year = 2133950400
//Problem starts here
08/15/2037 8:00 AM
2133950400 +1 Year =
12/31/1969 7:00 PM
+1 Year = 31536000
12/31/1970 7:00 PM
31536000 +1 Year = 63072000
12/31/1971 7:00 PM
63072000 +1 Year = 94694400
12/31/1972 7:00 PM
94694400 +1 Year = 126230400
12/31/1973 7:00 PM
126230400 +1 Year = 157766400
12/31/1974 7:00 PM
157766400 +1 Year = 189302400
//Some Left Out
ОБНОВЛЕНИЕ
Мне удалось использовать класс DateTime для правильной работы даты.
for ($x=1; $x<=$repeatTimes; $x++){
$date1->modify(" +".$repeatFreq." ".$repeatUnit);
$sDates[]=$date1->format('m/d/Y g:i A');
}