Foros del Web » Programando para Internet » PHP »

Restar meses a una fecha

Estas en el tema de Restar meses a una fecha en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 04/11/2008, 13:39
 
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);

?>
  #2 (permalink)  
Antiguo 04/11/2008, 13:42
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Restar meses a una fecha

de echo, si existe...

usas strtotime('-3 month') por ejemplo....

http://php.net/strtotime
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 04/11/2008, 13:47
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: Restar meses a una fecha

Hola

prueba con esta funcion

Código PHP:
function restaFechas($dFecIni$dFecFin)
{
    
$dFecIni str_replace("-","",$dFecIni);
    
//$dFecIni = str_replace("/","",$dFecIni);
    
$dFecFin str_replace("-","",$dFecFin);
    
//$dFecFin = str_replace("/","",$dFecFin);

    
ereg"([0-9]{1,2})([0-9]{1,2})([0-9]{2,4})"$dFecIni$aFecIni);
    
ereg"([0-9]{1,2})([0-9]{1,2})([0-9]{2,4})"$dFecFin$aFecFin);

    
$date1 mktime(0,0,0,$aFecIni[2], $aFecIni[1], $aFecIni[3]);
    
$date2 mktime(0,0,0,$aFecFin[2], $aFecFin[1], $aFecFin[3]);

    
    return 
round(($date2 $date1) / (30 60 60 24)); //redondeo para meses

EDITO
esta funcion resta entre dos fechas, no lei bien tu post

Un saludo
  #4 (permalink)  
Antiguo 04/11/2008, 13:56
 
Fecha de Ingreso: noviembre-2008
Ubicación: Montevideo
Mensajes: 23
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Restar meses a una fecha

Cita:
Iniciado por pateketrueke Ver Mensaje
de echo, si existe...

usas strtotime('-3 month') por ejemplo....
Me pinchaste el globo...

Bueno, una forma mas fácil:

Código PHP:
$fecha strtotime("2008-12-31");
$fecha strtotime("-3 months"$fecha);

//en un formato
echo date("Y-m-d"$fecha);

//en otro formato
echo date("d/m/Y"$fecha); 
Gracias pateketrueke
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:23.