21 Ноябрь 2008

Два 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

Будьте бдительны, коллеги! 🙂

У нас 3 комментария на запись “Два 2-х ноября”

Почему бы Вам не высказать своем мнение! Позвольте нам узнать, что Вы думаете...

  1. 1 On 20.11.2008, bompok said:

    вірно підмічено)))

  2. 2 On 20.11.2008, yAnTar said:

    Ага, чув про такий баг.
    Тут писали — http://php.com.ua/forum/viewtopic.php?f=2&t=9673

  3. 3 On 12.02.2009, Sergei Shablovsky said:

    Приветствую, Владимир !

    Ваши посты мне понравились на хабре. Я сейчас ищу срочно программиста для доводки проекта.
    Оплата достойная, требования — тоже.

    Пожалуйста, ответьте мне на мейл, я перешлю Вам ТЗ.

    Заранее спасибо! Удачного дня !

Оставить комментарий