Agregar número de días a una fecha


124

Deseo agregar varios días a la fecha actual: estoy usando el siguiente código:

$i=30;
echo $date = strtotime(date("Y-m-d", strtotime($date)) . " +".$i."days");

Pero en lugar de obtener la fecha adecuada, obtengo esto: 2592000

Por favor recomiende.




44
busque utilizando nombres de etiquetas con corchetes alrededor de ellos, por ejemplo, [php] [date] adden el cuadro de búsqueda. Encontrará muchas respuestas a preguntas como esta.
Mikel

Respuestas:


247

Esto debería ser

echo date('Y-m-d', strtotime("+30 days"));

strtotime

espera recibir una cadena que contenga un formato de fecha en inglés de EE. UU. e intentará analizar ese formato en una marca de tiempo Unix (la cantidad de segundos desde el 1 de enero de 1970 a las 00:00:00 UTC), en relación con la marca de tiempo dada ahora, o hora actual si ahora no se suministra.

mientras date

Devuelve una cadena formateada de acuerdo con la cadena de formato dada usando la marca de tiempo entera o la hora actual si no se proporciona ninguna marca de tiempo.

Consulte las páginas del manual para

y sus firmas de función.


Creo que esto causará problemas al cruzar los horarios de verano y otros elementos divertidos del calendario. Depende del contexto. Debe pensar si está buscando 30 bloques de 24 horas, que, al cruzar un día de horario de verano, podrían ponerlo a las 11:00 p.m.
JJ Rohrer

1
@JJRohrer no, no lo hará. strtotimetomará en cuenta cualquier horario de verano para la zona horaria configurada. El horario de verano es solo un problema cuando haces algo como esto OP: stackoverflow.com/questions/4066035
Gordon

Punto a favor. Llegué a esta pregunta tratando de resolver algo un poco más cercano a la pregunta a la que hizo referencia. Espero que mi comentario anterior haga que otros piensen en tomar en serio sus cálculos de fechas: es fácil olvidarse de todas las excepciones.
JJ Rohrer

64

Este podría ser bueno

function addDayswithdate($date,$days){

    $date = strtotime("+".$days." days", strtotime($date));
    return  date("Y-m-d", $date);

}

44
La solución anterior también se puede compactar en una línea si necesita una solución rápida y no desea crear una función. echo date ("Ymd", strtotime ("+ 12days", strtotime (20130101)))
Mayank Jaiswal

46
$date = new DateTime();
$date->modify('+1 week');
print $date->format('Y-m-d H:i:s');

o print date('Y-m-d H:i:s', mktime(date("H"), date("i"), date("s"), date("m"), date("d") + 7, date("Y"));


Este método aborda el cruce del horario de verano. No estoy seguro de si php tiene en cuenta otras peculiaridades de tiempo, como los segundos bisiestos, pero, dependiendo de sus necesidades, probablemente sea mejor usar DateTime vs. StrToTime si se trata de días calendario.
JJ Rohrer

@chx Esta solución también permite más cuidadosamente una fecha; por ejemplo, nuevo DateTime ('2016-12-09 10:35:58'); que proviene de una marca de tiempo de base de datos ...
mshaffer

10
$today=date('d-m-Y');
$next_date= date('d-m-Y', strtotime($today. ' + 90 days'));
echo $next_date;

10

También puede agregar así, si desea la fecha 5 días después de una fecha específica:

Tiene una variable con una fecha como esta (obtenida de una entrada o DB o simplemente codificada):

$today = "2015-06-15"; // Or can put $today = date ("Y-m-d");

$fiveDays = date ("Y-m-d", strtotime ($today ."+5 days"));

echo $fiveDays; // Will output 2015-06-20

7

Tenga en cuenta que el cambio de reloj cambia debido al horario de verano y puede ocasionarle problemas al calcular los días.

Aquí hay una pequeña función php que se encarga de eso:

function add_days($date, $days) {
    $timeStamp = strtotime(date('Y-m-d',$date));
    $timeStamp+= 24 * 60 * 60 * $days;

    // ...clock change....
    if (date("I",$timeStamp) != date("I",$date)) {
        if (date("I",$date)=="1") { 
            // summer to winter, add an hour
            $timeStamp+= 60 * 60; 
        } else {
            // summer to winter, deduct an hour
            $timeStamp-= 60 * 60;           
        } // if
    } // if
    $cur_dat = mktime(0, 0, 0, 
                      date("n", $timeStamp), 
                      date("j", $timeStamp), 
                      date("Y", $timeStamp)
                     ); 
    return $cur_dat;
}


6

Puede hacerlo manipulando el código de tiempo o usando strtotime () . Aquí hay un ejemplo usando strtotime.

$ data ['created'] = date ('Ymd H: i: s', strtotime ("+ 1 week"));


6

Puedes usar strtotime ()
$data['created'] = date('Y-m-d H:m:s', strtotime('+1 week'));


6

Sé que esta es una vieja pregunta, pero para PHP <5.3 podría intentar esto:

$date = '05/07/2013';
$add_days = 7;
$date = date('Y-m-d',strtotime($date) + (24*3600*$add_days)); //my preferred method
//or
$date = date('Y-m-d',strtotime($date.' +'.$add_days.' days');


5
$date = "04/28/2013 07:30:00";

$dates = explode(" ",$date);

$date = strtotime($dates[0]);

$date = strtotime("+6 days", $date);

echo date('m/d/Y', $date)." ".$dates[1];

4

Puedes probar esto.

$i=30;
echo  date("Y-m-d",mktime(0,0,0,date('m'),date('d')+$i,date('Y')));

3

Simple y mejor

echo date('Y-m-d H:i:s')."\n";
echo "<br>";
echo date('Y-m-d H:i:s', mktime(date('H'),date('i'),date('s'), date('m'),date('d')+30,date('Y')))."\n";

Prueba esto


3
//add the two day

$date = "**2-4-2016**"; //stored into date to variable

echo date("d-m-Y",strtotime($date.**' +2 days'**));

//print output
**4-4-2016**

2

Use esta función addDate () para sumar o restar días, meses o años (necesitará también la función auxiliar reformatDate ())

/**
 * $date self explanatory
 * $diff the difference to add or subtract: e.g. '2 days' or '-1 month'
 * $format the format for $date
 **/
    function addDate($date = '', $diff = '', $format = "d/m/Y") {
        if (empty($date) || empty($diff))
            return false;
        $formatedDate = reformatDate($date, $format, $to_format = 'Y-m-d H:i:s');
        $newdate = strtotime($diff, strtotime($formatedDate));
        return date($format, $newdate);
    }
    //Aux function
    function reformatDate($date, $from_format = 'd/m/Y', $to_format = 'Y-m-d') {
        $date_aux = date_create_from_format($from_format, $date);
        return date_format($date_aux,$to_format);
    }

Nota: solo para php> = 5.3



1
//Set time zone
date_default_timezone_set("asia/kolkata");
$pastdate='2016-07-20';
$addYear=1;
$addMonth=3;
$addWeek=2;
$addDays=5;
$newdate=date('Y-m-d', strtotime($pastdate.' +'.$addYear.' years +'.$addMonth. ' months +'.$addWeek.' weeks +'.$addDays.' days'));
echo $newdate;

1

Aunque esta es una vieja pregunta, esta forma de hacerlo tomaría muchas situaciones y parece ser robusta. Necesita tener PHP 5.3.0 o superior.

$EndDateTime = DateTime::createFromFormat('d/m/Y', "16/07/2017");
$EndDateTime->modify('+6 days');
echo $EndDateTime->format('d/m/Y');

Puede tener cualquier tipo de formato para la cadena de fecha y esto funcionaría.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.