example - ideone
$date1 = "12/06/2012";
$date1 = str_replace("/", "-", $date1);
// data americana
$dateInicio = date('Y-m-d', strtotime($date1));
$date2 = "12/06/2017";
$date2 = str_replace("/", "-", $date2);
// data americana
$dateFim = date('Y-m-d', strtotime($date2));
$time1=strtotime($date1);
// ano data inicial
$year1=date("Y",$time1);
$time2=strtotime($date2);
// ano data final
$year2=date("Y",$time2);
$difAno=$year2-$year1;
// se a diferença em anos for maior que 0 calculamos ano inicial e final
if ($difAno>0){
// para ano inicial
$fim = ($year1."-12-31");
$datetime1 = new DateTime($dateInicio);
$datetime2 = new DateTime($fim);
$interval = $datetime1->diff($datetime2);
echo "Ano: ".($year1)." - ";
echo $interval->format('%m Meses %d dias');
echo "<br>";
// para ano final
$inicio = ($year2."-01-01");
$datetime1 = new DateTime($inicio);
$datetime2 = new DateTime($dateFim);
$interval = $datetime2->diff($datetime1);
echo "Ano: ".($year2)." - ";
echo $interval->format('%m Meses %d dias');
echo "<br>";
}
// se a diferença entre os anos for maior que 1 fazemos um loop para calcular os demais
if ($difAno>1){
for ($x = 1; $x <= $difAno-1; $x++) {
echo "Ano: ".($year1+$x)." - ";
echo date("z", mktime(0,0,0,12,31,($year1+$x))) + 1;
echo " = 12 meses <br>";
}
}
-
If we use this format of dd-mm-yyyy
we will have errors, so we use the date()
function that returns dates in PHP in the format you want. date ()
-
$ interval-> format - Formats a range.
The "Era Unix" began on January 1, 1970, and thanks to it, we can make precise date calculations. The mktime () function returns the total number of seconds that have passed since the beginning of the Unix era. The date () function can format dates based on Unix Era!
According to the author's comment
é que preciso incluir o dia final
Just include the following line in the code
$dateFim = date('Y-m-d', strtotime($dateFim. ' + 1 days'));
So we will have no ideone
$dateFim ="";
$date1 = "12/06/2012";
$date1 = str_replace("/", "-", $date1);
// data americana
$dateInicio = date('Y-m-d', strtotime($date1));
$date2 = "12/06/2017";
$date2 = str_replace("/", "-", $date2);
// data americana
$dateFim = date('Y-m-d', strtotime($date2));
$dateFim = date('Y-m-d', strtotime($dateFim. ' + 1 days'));
$time1=strtotime($date1);
// ano data inicial
$year1=date("Y",$time1);
$time2=strtotime($date2);
// ano data final
$year2=date("Y",$time2);
$difAno=$year2-$year1;
// se a diferença em anos for maior que 0 calculamos ano inicial e final
if ($difAno>0){
// para ano inicial
$fim = ($year1."-12-31");
$datetime1 = new DateTime($dateInicio);
$datetime2 = new DateTime($fim);
$interval = $datetime1->diff($datetime2);
echo "Ano: ".($year1)." - ";
echo $interval->format('%m Meses %d dias');
echo "<br>";
// para ano final
$inicio = ($year2."-01-01");
$datetime1 = new DateTime($inicio);
$datetime2 = new DateTime($dateFim);
$interval = $datetime2->diff($datetime1);
echo "Ano: ".($year2)." - ";
echo $interval->format('%m Meses %d dias');
echo "<br>";
}
// se a diferença entre os anos for maior que 1 fazemos um loop para calcular os demais
if ($difAno>1){
for ($x = 1; $x <= $difAno-1; $x++) {
echo "Ano: ".($year1+$x)." - ";
echo date("z", mktime(0,0,0,12,31,($year1+$x))) + 1;
echo " = 12 meses <br>";
}
}