fork download
  1. <?php
  2.  
  3.  
  4. $dateFim ="";
  5.  
  6. $date1 = "12/06/2012";
  7. $date1 = str_replace("/", "-", $date1);
  8. // data americana
  9. $dateInicio = date('Y-m-d', strtotime($date1));
  10.  
  11. $date2 = "12/06/2017";
  12. $date2 = str_replace("/", "-", $date2);
  13. // data americana
  14. $dateFim = date('Y-m-d', strtotime($date2));
  15. $dateFim = date('Y-m-d', strtotime($dateFim. ' + 1 days'));
  16.  
  17. $time1=strtotime($date1);
  18. // ano data inicial
  19. $year1=date("Y",$time1);
  20.  
  21. $time2=strtotime($date2);
  22. // ano data final
  23. $year2=date("Y",$time2);
  24.  
  25. $difAno=$year2-$year1;
  26. // se a diferença em anos for maior que 0 calculamos ano inicial e final
  27. if ($difAno>0){
  28. // para ano inicial
  29. $fim = ($year1."-12-31");
  30. $datetime1 = new DateTime($dateInicio);
  31. $datetime2 = new DateTime($fim);
  32. $interval = $datetime1->diff($datetime2);
  33. echo "Ano: ".($year1)." - ";
  34. echo $interval->format('%m Meses %d dias');
  35.  
  36. echo "\n";
  37.  
  38. // para ano final
  39. $inicio = ($year2."-01-01");
  40. $datetime1 = new DateTime($inicio);
  41. $datetime2 = new DateTime($dateFim);
  42. $interval = $datetime2->diff($datetime1);
  43. echo "Ano: ".($year2)." - ";
  44. echo $interval->format('%m Meses %d dias');
  45.  
  46. echo "\n";
  47.  
  48. }
  49.  
  50. // se a diferença entre os anos for maior que 1 fazemos um loop para calcular os demais
  51. if ($difAno>1){
  52. for ($x = 1; $x <= $difAno-1; $x++) {
  53.  
  54. echo "Ano: ".($year1+$x)." - ";
  55. echo date("z", mktime(0,0,0,12,31,($year1+$x))) + 1;
  56. echo " = 12 meses \n";
  57.  
  58. }
  59. }
  60.  
Success #stdin #stdout 0.02s 83904KB
stdin
Standard input is empty
stdout
Ano: 2012 - 6 Meses 19 dias
Ano: 2017 - 5 Meses 12 dias
Ano: 2013 - 365 = 12 meses 
Ano: 2014 - 365 = 12 meses 
Ano: 2015 - 365 = 12 meses 
Ano: 2016 - 366 = 12 meses