У меня есть функция, которая вычислить разницу дней между двумя датами:PHP ад
function daysBetweenDates($startDate, $endDate) {
list($year1, $month1, $day1) = explode('-', $startDate);
list($year2, $month2, $day2) = explode('-', $endDate);
$f = mktime(0, 0, 0, $month2, $day2, $year2);
$i = mktime(0, 0, 0, $month1, $day1, $year1);
$difference = $f - $i;
$days = floor($difference/86400);
return $days;
}
Проблема заключается в том, что этот код получает странные результаты с некоторыми датами. Например, если $startDate = '2014-10-14'
и $endDate = '2014-10-28'
, выход этой функции всюду равен 14
, но я получаю 13
.
Я проверил некоторые онлайн-переводчики php и по какой-то чертовой причине я не знаю, почему, мой mktime
возвращает мне разные значения.
Пример:
на 3v4l.org
работает mktime(0, 0, 0, 10, 28, 2014)
возвращается 1414450800
для PHP versions 5.1.0 - 5.5.8
на 3v4l.org
работает mktime(0, 0, 0, 10, 14, 2014)
возвращается 1413237600
для PHP versions 5.1.0 - 5.5.8
Выход функции с этими значениями является 14
.
В моем коде, когда я запускаю те же значения на mktime
, я получаю 1414461600
и 1413255600
соответственно. Выполняя этот код, выход функции 13
.
И я бегу на PHP 5.3.3
.
Любая помощь при понимании, что не так с моей конфигурацией среды/php/ошибкой функции/неправильным кодом, будет очень признательна.
Есть ли переход на летнее время между датами в настройке часового пояса по умолчанию, определенном в файле php.ini? –
Разница между этими двумя отметками времени составляет 13 дней 23 часа. Таким образом, должно произойти изменение ДСТ. – Barmar
Попробуйте использовать 'round()' вместо 'floor()'. – Barmar