PHP: Restar o Sumar Dias, Semanas, Meses o Años a la fecha actual

Recordemos que la funcion date(‘Y-m-d’), nos devuelve la fecha actual en el formato ‘Año-mes-dia’ y si queremos otro formato solo cambiamos el orden, por ejemplo date(‘d-m-Y’). El siguiente script muestra como Restar Dias, Semanas, Meses o Años a la fecha actual en PHP.

El codigo

$dt_Ayer= date('Y-m-d', strtotime('-1 day')) ; // resta 1 día
$dt_laSemanaPasada = date('Y-m-d', strtotime('-1 week')) ; // resta 1 semana
$dt_elMesPasado = date('Y-m-d', strtotime('-1 month')) ; // resta 1 mes
$dt_ElAnioPasado = date('Y-m-d', strtotime('-1 year')) ; // resta 1 año
//Mostrar fechas
echo $dt_Ayer;
echo $dt_laSemanaPasada;
echo $dt_elMesPasado;
echo $dt_ElAnioPasado;
/*
Resultado (fecha actual: 2012-09-18):
2012-09-17
2012-09-11
2012-08-18
2011-09-18
*/

…Por el contrario si lo que deseas es sumar entonces solo cambias el signo – por un +, asi:
$dt_5DiasDespues = date('Y-m-d', strtotime('+5 day')) ; // Suma 5 días
$dt_5SemanasDespues = date('Y-m-d', strtotime('+5 week')) ; // Suma 5 semanas
$dt_5MesesDespues = date('Y-m-d', strtotime('+5 month')) ; // Suma 5 meses
$dt_5AniosDespues = date('Y-m-d', strtotime('+5 year')) ; // Suma 5 años
//Mostrar fechas
echo $dt_5DiasDespues;
echo $dt_5SemanasDespues;
echo $dt_5MesesDespues;
echo $dt_5AniosDespues;
/*
Resultado (fecha actual: 2012-09-18):
2012-09-23
2012-10-23
2013-02-18
2017-09-18
*/

¿Facil, no?

 

Si tienes alguna duda expresala en un comentario. Saludos.
 
 
Enlaces relacionados:
 
 

Acerca de gonzasilve
Freelance Web Developer.

22 Responses to PHP: Restar o Sumar Dias, Semanas, Meses o Años a la fecha actual

  1. Después de varias pruebas ya logré resolver el asunto.
    Aquí lo incluyo para quienes lo quieran usar.
    do {
    $hacetanto = $year – $row[«yid»] ; // resta los años

    echo «Un día como hoy en el año de «.$row[«yid»].» (hace «.$hacetanto.» años): «.$row[«content»].» «;
    } while ($row = mysql_fetch_array($consulta));
    echo » \n»;
    } else {
    echo «En un día como hoy no tenemos efemérides registradas.»;

    }

    Si gustan verlo en vivo aparece diario en:
    http://aprendamos.org/

  2. Trato de retomar el código para algo más complejo. Tengo fechas de acontecimientos en una base de datos que contienen día, mes y año separados. En mi página quiero poner «hace tantos años», entonces:
    $hoy = strftime(«%Y-%m-%d» ,time());
    $year = strftime(«%Y»,strtotime($hoy)); // tengo el año actual
    // hago la consulta para sacar los registros de la base de datos
    $consulta = mysql_query(«SELECT * FROM `efemerides` WHERE `mid`=’$el_mes’ AND `did`=’$dia’ ORDER BY `yid`»);
    if ($row = mysql_fetch_array($consulta)){
    while ($field = mysql_fetch_field($consulta))

    // inicia la presentación de cada registro
    echo » \n»;
    do {
    $hacetanto = $year, strtotime(-«.$row[«yid»].») ; // resta los años

    echo «Un día como hoy en el año de «.$row[«yid»].» (hace $hacetanto años: «.$row[«content»].» «;
    } while ($row = mysql_fetch_array($consulta));
    echo » \n»;
    } else {
    echo «En un día como hoy no tenemos efemérides registradas.»;
    }

    Para obtener la variable $hacetanto algo estoy poniendo mal que no obtengo resultados.

    ¿ALGUNA SUGERENCIA O ALGUIEN QUE IDENTIFIQUE QUÉ ESCRIBÍ MAL?

    Gracias de antemano.

  3. Muchas gracias por el este artículo, me sirvio bastante para resolver la problemática que me aquejaba.

  4. juan says:

    les cuento me pidieron un ejercicio y no se como desarrollarlo en php a ver si me pueden ayudar
    tengo estos datos
    fecha 1,fecha 2,periodo,dias,fecha 3
    se debe calcular entre fecha 2 y periodo el tiempo transcurrido y al cabo de cada 5 años sumar 3 dias.el resultado debe reflejarse en días teniendo como numero base 30 + el numero de dias si es mayor a 5 años.
    y con fecha 1 y fecha 3 siendo el inicio y el fin, segun mi fecha inicial me debe mostrar en fecha 3 o final los dias reflejados en el campo dias.
    Quien me ayuda con eso por favor…

  5. vanessa says:

    en donde debo colocar ese codigo?

  6. Oscar campos says:

    Hola, me gustaria saber como puedo hacer eso mismo pero de un dato rescatado de una base de datos, de una fecha entregada? ejemplo del 05-01-2010 gracias

  7. Jai says:

    Hola, cómo se haría que mediante una función o clase solo se pueda hacer más o menos así:

    echo resultadodia($dia,-1);

  8. SI necesitan esta funcion suma los dias y verifica que no sea sabado o domingo, caso contrario arrastra al primer dia laborable.

    function sumarDiaLaborables($fecha, $dias) {

    $nuevafecha = date(‘Y-m-d’, strtotime(«+$dias day», strtotime($fecha)));

    $diasemana = strtolower(date(‘l’, strtotime($nuevafecha)));

    if ($diasemana == «saturday» || $diasemana == «sunday») {

    if ($diasemana == «saturday») {

    $sumar_dias = 2;

    }

    if ($diasemana == «sunday») {

    $sumar_dias = 1;

    }

    return $this->sumarDiaLaborables($nuevafecha, $sumar_dias);

    } else

    return $nuevafecha;

    }

  9. david says:

    muchas gracias amigo

  10. Luis says:

    No funciona a la perfección , deberías probar todas las probabilidades, por que por ejemplo hoy es 31 de enero y quiero sumarle un mes y me devuelve 3 de marzo , lo cual es erróneo. Muchas gracias Por La atención Prestada , Saludos.

  11. Patricia says:

    Tengo una tabla con una fecha en formato y-m-d hh-mm-ss….. como extraigo solo la fecha y a esa fecha le sumo el tiempo que tengo en otro campo???

  12. criszz says:

    como hago para restarle una semana pero teniendo solo los campos de dia y mes sin necesidad de tener los años para respuestas mi correo es
    elcris1793@hotmail.com

  13. criszz says:

    como hago para restarle una semana pero teniendo solo los campos de dia y mes sin necesidad de tener los años

  14. ben says:

    hola en mi formulario quiero sumar años a mi fecha inicial para que me de como resultado fecha final automaticamente con php como hago gracias por responder

  15. Alejandro says:

    Hola, muy bueno. me sirvio muchisimo.
    Les dejo como lo utilice yo por si alguno le sirve, con variable
    // primero chequear si la resta a sumar o restar es negativa o positiva

    if ($total < 0){
    /* $total es obtenido por otra funcion que resta la fecha actual con la duracion de un numero en dias obtenido de una base de datos.*/
    Funcion restar fechas.
    $Fecha_Mensaje = date("j-n-Y");
    $Fecha_Mensaje = strtotime("$Fecha_Mensaje");
    $fecha_alta = strtotime("$fecha_alta"); // $fecha_alta obtenido desde base de datos ej, 05-8-2013
    $datediff = $Fecha_Mensaje – $fecha_alta;
    $restan = floor($datediff/(60*60*24));
    $total = $duracion – $restan;

    $restoactual = "$total day"; // en este caso daría un numero negatio, ej -5
    }else{
    $restoactual = "+$total day"; // en este caso daría un numero positivo ej -5 y le agrego el + para que funcione.
    }
    $dt_definir= date('d-m-Y', strtotime($restoactual)) ; //

    Saludos.

  16. Marieli says:

    Necesito sumar los meses, pero si estos se pasan del rango, es decir que llegaran a ser 14 meses, que cambie de año, como puedo hacer eso?

  17. Pingback: PHP: Mostrar la fecha actual en español « .::programming notes::. Gonzalo Silverio

  18. Pingback: PHP: Obtener el ultimo día de cualquier mes « .::programming notes::. Gonzalo Silverio

  19. Pingback: PHP: Sumar o Restar Dias a cualquier fecha « .::programming notes::. Gonzalo Silverio

Deja un comentario