Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/11/2008, 13:39
feippe
 
Fecha de Ingreso: noviembre-2008
Ubicación: Montevideo
Mensajes: 23
Antigüedad: 15 años, 6 meses
Puntos: 1
Mensaje Restar meses a una fecha

Busqué una función que le pase una fecha y una cantidad de meses, y se los restara, pero no encontré. Entonces hice la mia... y pensé que talvez les sirva a otros así que aquí se las paso. Lo bueno de esta función es que puedes usarla con el formato de fecha dd/mm/yyyy o con yyyy-mm-dd

Dentro de la función hay comentarios y pongo un ejemplo de uso debajo.
En ésta no contemplo los años bisiestos... si alguien encuentra una función mejor que la publique.

Código PHP:
<?php

function restarMeses($fecha='0'$cantMeses=1$formato=2){
    
//***********************************************************//
    // Si no se indica $fecha se toma la fecha actual por defecto//
    // Si no se indica $cantMeses se toma 1 por defecto          //
    // Si no se indica $formato se toma 2 por defecto            //
    //              formato 1: DD/MM/YYYY                        //
    //              formato 2: YYYY-MM-DD (toma este por defecto)//
    // Nota: No se contemplan los años bisiesto                  //
    //***********************************************************//
    
$d 1$m 1$y 1900; if($formato==1){ if($fecha=='0'){
    
$fecha date('d/m/Y'); } $f split('/'$fecha); $d $f[0];
    
$m $f[1]; $y $f[2]; }else if($formato==2){ if($fecha=='0'){
    
$fecha date('Y-m-d'); }$f split('-'$fecha); $d $f[2];
    
$m $f[1]; $y $f[0]; }if($formato == || $formato==2){
    for(
$i=1;$i<=$cantMeses;$i++){ if(($m-1)==0){ $m 12;
    
$y $y-1; }else{ $m $m-1; }}    if($d==31){
    if(
$m==11 || $m==|| $m==|| $m==4){ $d 30; }else if($m==2){
    
$d 29; }}else if($d==30 && $m==2){$d 29;}if($d<10){
    
$d "0".$d;}if($m<10){    $m "0".$m;}if($formato==1){
    
$fecha $d."/".$m."/".$y;}else if($formato==2){
    
$fecha $y."-".$m."-".$d;}return $fecha;}else{
    return 
"error en formato seleccionado";}
}

//EJEMPLO DE USO
echo restarMeses('31/12/2008'31);
echo 
"<br/>";
echo 
restarMeses('2008-1-20'52);

?>