3v4l.org

run code in 300+ PHP versions simultaneously
<?php $start = new DateTime('2017-07-11'); $end = new DateTime('2017-08-03'); $diff = $start->diff($end); $differenceInDays = ($diff->format('%m') * 30) + $diff->format('%d'); // caso houver uma diferença menor de um mês, // deve-se verificar se não passou pelo dia 31 if ($diff->format('%m') == 0) { //cria o trigésimo primeiro dia do mês inicial $thiryFirstDayOfStartMonth = $start->format('Y-m-31'); // Cria o objeto DateTime do trigésimo primeiro dia do mês inicial // Aqui está o "truque", caso o mês possuir apenas 30 dias, // como o caso de novembro, a data 31/11/2017 será transformada em 01/12/2017 // é um comportamento padrão da biblioteca $thirtyFirstDay = DateTime::createFromFormat('Y-m-d' , $thiryFirstDayOfStartMonth); //O trigésimo primeiro dia precisa ser menor que a data final do cálculo. if ($thirtyFirstDay < $end) { //Se data criada for realmente dia 31 do mês, deve-se if ($thirtyFirstDay->format('Y-m-d') == $thiryFirstDayOfStartMonth) { $differenceInDays--; } } } var_dump($differenceInDays);

preferences:
130.65 ms | 404 KiB | 5 Q