Два 2-х ноября
posted in PHP |Писал цикл по дням в PHP. Есть переменные $f
и $t
, в которых начало и конец временного отрезка в SQL формате. У меня заданы начало: 2008-10-28 и конец 2008-11-10.
есть цикл, в котором к timestamp текущей даты прибавляет количество секунд в сутках:
$cur=$f; // цикл по $cur. вначале в ней $f preg_match("/([0-9]{4})-([0-1]{1}[0-9]{1})-([0-3]{1}[0-9]{1})/",$cur,$matches); // разбиваем строку с датой $curts=mktime(0,0,0,$matches[2],$matches[3],$matches[1]); // получаем timestamp для начальной даты в 00:00:00 while ($cur<=$t) { echo "cur:".$cur."|t:".$t." (".$curts.")<br />"; // выводим текущую дату в цикле и конечную, timestamp текщей даты $curts+=24*60*60; // увеличиваем на сутки timestamp $cur=date("Y-m-d",$curts);
В итоге у меня на выводе получалось два 2-х ноября. Я долго смотрел в код с круглыми глазами, не понимая как такое может быть.
Потом догадался, тчо это от того, что 2-го ноября в штатах переводили часы, то есть через 24 часа от 00:00:00 2-го ноября было не 00:00:00 3-го, а 23:00:00 все того же второго ноября.
Фикс заключается в том, тчоб взять начальный timestamp посередине дня
$curts=mktime(12,0,0,$matches[2],$matches[3],$matches[1]); // получаем timestamp для начальной даты в 12:00:00
Будьте бдительны, коллеги! 🙂