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.

Pankaj Khurana
fuente
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.

Gordon
fuente
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);

}
Gowri
fuente
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"));

chx
fuente
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;
shraddha Dharmamer
fuente
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
Andy
fuente
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;
}
Bjoern
fuente
7

También puedes probar:

$date->modify("+30 days");

Insectante
fuente
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"));

Paul Truesdell
fuente
6

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

Laxman13
fuente
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');
Fabricio
fuente
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];
Raipure Mayank
fuente
4

Puedes probar esto.

$i=30;
echo  date("Y-m-d",mktime(0,0,0,date('m'),date('d')+$i,date('Y')));
J.Rob
fuente
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

usuario3767878
fuente
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**
Sajan Patel
fuente
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

Juancho Ramone
fuente
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;
Desarrollador web Dharmendra Verma
fuente
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.

Deepak Daniel
fuente