Sumar / restar dias, semanas, meses o años a una fecha en PHP

Creando algunos reportes en PHP surgió la necesidad de sumar o restar días y meses a una fecha en PHP investigando encontré la función strtotime de PHP que convierte una fecha u hora a una fecha unix y desde donde se le pueden sumar o restar dias, semanas, etc.

Función strtotime

La funcion strtotime recibe 2 parametros el primero llamado time es una cadena de fecha u hora, podemos utilizar un formato de fecha relativa y el segundo argumento es now hace referencia a una marca de tiempo que se usa como base para el cálculo de las fechas relativas.

Veamos unos ejemplos


$fecha ='2013-12-16';

$fecha10diasdespues = date('Y-m-d',strtotime('+10 days', strtotime($fecha)));
$fecha5mesesantes = date('Y-m-d',strtotime('-20 months', strtotime($fecha)));
$fecha3semanasdespues = date('Y-m-d',strtotime('+3 weeks', strtotime($fecha)));

echo $fecha10diasdespues;    //2013-12-26
echo $fecha20mesesantes;     //2012-04-16
echo $fecha3semanasdespues;  //2014-01-06

10 comentarios en “Sumar / restar dias, semanas, meses o años a una fecha en PHP”

  1. Cristobal dice:

    muy chida la pagina en verdad una d elas mejores que e visitado muy funcional.

  2. Alex dice:

    De verdad que está muy bueno y es útil, aún mezclado (embebido) con jquery o javascript. Pues resulta un muy corto procedimiento y escritura.

    Excelente

  3. luis dice:

    Amigo felicitaciones por tu pagina. Tengo una consulta para ti.
    Entre tus desarrollos tienes por ahí algún ejemplo de como restar una hora ingresada en una tabla mysql a la hora actual? Para saber los minutos transcurridos entre dichas horas? Necesito realizar unos despachos sincronizados a razón de 4 minutos y el Excel y otras cosas no han corrido. Espero que me puedas ayudar, saludos y felicitaciones nuevamente por tu sitio.

    lp

  4. luis dice:

    Olvide decir que los minutos deben ir actualizándose hasta que nuevamente ingrese en l a tabla la hora actual como hora inicial…

  5. Buenas tardes, me funcionó a la perfección, estuve buscando en muchos sitios y no daba con la solución, pero tu método me funcionó

  6. Luis dice:

    No Funciona a La perfección amigo , deberías probar primero tu código antes de publicarlo , ya que no es exacto en su resultado , lo cual no es funcional. La razón es la siguiente , toma como fecha 31 enero y sumarle 1 mes , como resultado va arrojar 3 de marzo lo cual es un error, y esto se debe a que este código cuando se le pide que sume un mes , lo que hace es sumarle 30 días a la fecha y no calcularle el mes también , esto seria mejor si lo manejas con un case. Gracias por tu atención y espero sea de ayuda mi aporte, Saludos.

  7. jpier dice:

    Gracias me salvaste !!!

  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. neto dice:

    me sirvio de maravilla , muchas gracias
    saludos !!!!

  10. juan dice:

    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…

Deja un comentario