2014-01-16 6 views
0

Я использую этот код, чтобы вычислить дни, месяцы и т.д. между 2 датамидаты и времени показывает дополнительный день

$datetime1 = new DateTime('2013-12-01'); 
$datetime2 = new DateTime('2014-08-01'); 

$interval = $datetime1->diff($datetime2); 
$year = $interval->format('%y'); 
$month = $interval->format('%m'); 
$day = $interval->format('%d'); 

var_dump($interval->days, $year, $month, $day); 

Выход я получаю:

int(243) 
string(1) "0" 
string(1) "8" 
string(1) "1" 

Почему там один день дополнительно? мне кажется, что всего 8 месяцев?

2014-01-01 - 2014-09-01 //8 months 0 days.. 
2014-04-01 - 2014-12-01 //7 months 30 days... 
+0

'верхняя_граница - lower_limit + 1' общая формула – hjpotter92

+0

' 2014-01-01' - '2014-09-01' = 8 месяцев __0__ дней ..' 2014-04-01' - '2014- 12-01' = 7 месяцев 30 дней ... – Sander

+0

Я пробую этот код на phpcodepad.com, и он не дает лишний день. – developerCK

ответ

1

From the document, что ожидается.

Примечание: Метод DateInterval :: Формат() не пересчитывать нести над точками в строках времени, ни в финиковых сегментах. Ожидается, что , поскольку значения переполнения не могут превышать «32 дня», которые могут быть истолкованы как «от 1 месяца до 4 дней» до «1 месяц и 1 день».

Смежные вопросы