Veamos este algoritmo para calcular los años, meses y días entre dos fechas dadas. No comprobaremos si las fechas entradas son correctas.
Primero especificaremo
s las dos fechas (Las fechas deberán tener el formato dd/mm/aaaa para que el programa funcione correctamente).
1. $fechaInicio ="28/02/1999";
2. $fechaActual = "29/02/2000";
Cortamos el texto para seleccionar el dia, mes y año de la fecha Actual y de la fecha de Inicio respectivament
e con la función substr de php.
copiar a portapapelesimprimir
1. $diaActual = substr($fechaActual, 0, 2);
2. $mesActual = substr($fechaActual, 3, 5);
3. $anioActual = substr($fechaActual, 6, 10);
4. $diaInicio = substr($fechaInicio, 0, 2);
5. $mesInicio = substr($fechaInicio, 3, 5);
6. $anioInicio = substr($fechaInicio, 6, 10);
Ahora utilizaremos una variable auxiliar donde guardaremos el número de días que tiene el mes anterior al mes Inicio. Tendremos en cuenta también el mes de febrero, para calcular si un año es bisiesto utilizaremos la condición ($anioActual%4==0 && $anioActual%100!=0) || $anioActual%400==0
1. $b = 0;
2. $mes = $mesInicio-1;
3. if($mes==2){
4. if(($anioActual%4==0 && $anioActual%100!=0) || $anioActual%400==0){
5. $b = 29;
6. }else{
7. $b = 28;
8. }
9. }
10. else if($mes<=7){
11. if($mes==0){
12. $b = 31;
13. }
14. else if($mes%2==0){
15. $b = 30;
16. }
17. else{
18. $b = 31;
19. }
20. }
21. else if($mes>7){
22. if($mes%2==0){
23. $b = 31;
24. }
25. else{
26. $b = 30;
27. }
28. }
Seguimos con el código que calculará los días, meses y años:
1. if(($anioInicio>$anioActual) || ($anioInicio==$anioActual && $mesInicio>$mesActual) ||
2. ($anioInicio==$anioActual && $mesInicio == $mesActual && $diaInicio>$diaActual)){
3. echo "La fecha de inicio ha de ser anterior a la fecha Actual";
4. }else{
5. if($mesInicio <= $mesActual){
6. $anios = $anioActual - $anioInicio;
7. if($diaInicio <= $diaActual){
8. $meses = $mesActual - $mesInicio;
9. $dies = $diaActual - $diaInicio;
10. }else{
11. if($mesActual == $mesInicio){
12. $anios = $anios - 1;
13. }
14. $meses = ($mesActual - $mesInicio - 1 + 12) % 12;
15. $dies = $b-($diaInicio-$diaActual);
16. }
17. }else{
18. $anios = $anioActual - $anioInicio - 1;
19. if($diaInicio > $diaActual){
20. $meses = $mesActual - $mesInicio -1 +12;
21. $dies = $b - ($diaInicio-$diaActual);
22. }else{
23. $meses = $mesActual - $mesInicio + 12;
24. $dies = $diaActual - $diaInicio;
25. }
26. }
27. echo "Años: ".$anios." <br />";
28. echo "Meses: ".$meses." <br />";
29. echo "Días: ".$dies." <br />";
30. }
Código Completo
<?php $fechaInicio ="28/02/1999";
$fechaActual = "29/02/2000";
$diaActual = substr($fechaActual, 0, 2);
$mesActual = substr($fechaActual, 3, 5);
$anioActual = substr($fechaActual, 6, 10);
$diaInicio = substr($fechaInicio, 0, 2);
$mesInicio = substr($fechaInicio, 3, 5);
$anioInicio = substr($fechaInicio, 6, 10);
$b = 0;
$mes = $mesInicio-1;
if($mes==2){
if(($anioActual%4==0 && $anioActual%100!=0) || $anioActual%400==0){
$b = 29;
}else{
$b = 28;
}
}
else if($mes<=7){
if($mes==0){
$b = 31;
}
else if($mes%2==0){
$b = 30;
}
else{
$b = 31;
}
}
else if($mes>7){
if($mes%2==0){
$b = 31;
}
else{
$b = 30;
}
}
if(($anioInicio>$anioActual) || ($anioInicio==$anioActual && $mesInicio>$mesActual) ||
($anioInicio==$anioActual && $mesInicio == $mesActual && $diaInicio>$diaActual)){
echo "La fecha de inicio ha de ser anterior a la fecha Actual";
}else{
if($mesInicio <= $mesActual){
$anios = $anioActual - $anioInicio;
if($diaInicio <= $diaActual){
$meses = $mesActual - $mesInicio;
$dies = $diaActual - $diaInicio;
}else{
if($mesActual == $mesInicio){
$anios = $anios - 1;
}
$meses = ($mesActual - $mesInicio - 1 + 12) % 12;
$dies = $b-($diaInicio-$diaActual);
}
}else{
$anios = $anioActual - $anioInicio - 1;
if($diaInicio > $diaActual){
$meses = $mesActual - $mesInicio -1 +12;
$dies = $b - ($diaInicio-$diaActual);
}else{
$meses = $mesActual - $mesInicio + 12;
$dies = $diaActual - $diaInicio;
}
}
echo "Años: ".$anios." <br />";
echo "Meses: ".$meses." <br />";
echo "Días: ".$dies." <br />";
}?>
fuente: webtutoriales