Сегодня наткнулся на функцию, которая должна вычислять количество дней между датами, внутри нее было написанно примерно следующее:
Вроде все верно на первый взгляд, но работала она подозрительно.
Погуглив нашел подобный код на phpclub'е.
А проблема вот в чем:
разница между '27-03-2009' и '30-03-2009' — 2 дня.
разница между '27-04-2009' и '30-04-2009' — 3 дня.
Подозрительно, думал меня уже подглючивает под конец дня, ан-нет. Таки неверно.
А вся проблема вот в чем.
29 марта в дне 23 часа, из за перевода времени, итого выходило не 3, а 2.95 и bcdiv выдвал 2.
Аналогично подумал что в 25 октября 25 часов — так оно и есть.
Вот так вот бывает, никому нельзя верить :)
$arr_mk = mktime (0, 0, 0, date('m', strtotime($arr_date)), date('d', strtotime($arr_date)), date('Y', strtotime($arr_date)));
$dep_mk = mktime (0, 0, 0, date('m', strtotime($dep_date)), date('d', strtotime($dep_date)), date('Y', strtotime($dep_date)));
$mk_diff = $dep_mk - $arr_mk;
$days = bcdiv($mk_diff/86400); // 60*60*24
Вроде все верно на первый взгляд, но работала она подозрительно.
Погуглив нашел подобный код на phpclub'е.
А проблема вот в чем:
разница между '27-03-2009' и '30-03-2009' — 2 дня.
разница между '27-04-2009' и '30-04-2009' — 3 дня.
Подозрительно, думал меня уже подглючивает под конец дня, ан-нет. Таки неверно.
А вся проблема вот в чем.
29 марта в дне 23 часа, из за перевода времени, итого выходило не 3, а 2.95 и bcdiv выдвал 2.
Аналогично подумал что в 25 октября 25 часов — так оно и есть.
Вот так вот бывает, никому нельзя верить :)