Agregar días a $ Date en PHP

215

Tengo una fecha devuelta como parte de una consulta mySQL en el formulario 2010-09-17

Me gustaría establecer las variables $ Date2 a $ Date5 de la siguiente manera:

$Date2 = $Date + 1

$Date3 = $Date + 2

etc.

para que regrese 2010-09-18, 2010-09-19etc.

Yo he tratado

date('Y-m-d', strtotime($Date. ' + 1 day'))

pero esto me da la fecha ANTES $Date.

¿Cuál es la forma correcta de obtener mis fechas en el formato 'Ymd' para que puedan usarse en otra consulta?

Istari
fuente

Respuestas:

446

Todo lo que tienes que hacer es usarlo en dayslugar de hacerlo dayasí:

<?php
$Date = "2010-09-17";
echo date('Y-m-d', strtotime($Date. ' + 1 days'));
echo date('Y-m-d', strtotime($Date. ' + 2 days'));
?>

Y sale correctamente:

2010-09-18
2010-09-19
shamittomar
fuente
77
Sale correctamente usando igual de daybien ... date("Y-m-d", strtotime('2010-09-17 + 1 day'))-> 2010-09-18, date("Y-m-d", strtotime('2010-09-17 + 2 day'))->2010-09-19
Daniel Vandersluis
Solo lo intenté de esta manera y funcionó. Todavía no tengo idea de por qué obtuve un valor un día antes de mi fecha de inicio cuando lo probé inicialmente.
Istari
¿Qué pasa si tuviera que agregar una variable por el número de días?
Carlos Martins
3
@Carlos echo date ("Ymd", strtotime ($ Date. '+'. $ Variable. 'Days'));
Pradeep Kumar Prabaharan
No, este método no funciona en absoluto. Está regresando en alguna fecha de 2004.
gegobyte
81

Si usa PHP 5.3, puede usar un DateTimeobjeto y su addmétodo:

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->add(new DateInterval('P1D')); // P1D means a period of 1 day
$Date2 = $date->format('Y-m-d');

Eche un vistazo a la página del manual del DateIntervalconstructor para ver cómo construir otros períodos para agregar a su fecha (2 días serían 'P2D', 3 serían 'P3D', y así sucesivamente).

Sin PHP 5.3, debería poder usar strtotimela forma en que lo hizo (lo he probado y funciona tanto en 5.1.6 como en 5.2.10):

$Date1 = '2010-09-17';
$Date2 = date('Y-m-d', strtotime($Date1 . " + 1 day"));
// var_dump($Date2) returns "2010-09-18"
Daniel Vandersluis
fuente
Lo siento, Daniel, pero el servidor web ejecuta php 5.2.6, por lo que esto no funcionará
Istari
2
DateTime::constructusa el mismo mecanismo strtotimepara analizar la fecha, por lo que también puede hacer new DateTime("+1 day $date")lo que no requeriría 5.3
Gordon
No quise rechazar esto, pero de alguna manera lo hice = /
Steven
Esta es la respuesta real para php 5.5+
TheLegendaryCopyCoder
29

Desde PHP 5.2 en adelante puede usar modificar con un objeto DateTime:

http://php.net/manual/en/datetime.modify.php

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->modify('+1 day');
$Date2 = $date->format('Y-m-d');

Tenga cuidado al agregar meses ... (y en menor medida, años)

Omn
fuente
la respuesta aceptada solo da respuesta por más de 15000 días donde esta respuesta da respuesta cuando agrega más de 25000 días también ..
Pradeep Kumar Prabaharan
También puede consultar esto en un DateTimeImmutable () y obtendrá una copia modificada sin riesgo de alterar el original.
Xavi Montero
17

Aquí hay un pequeño fragmento para demostrar las modificaciones de fecha:

$date = date("Y-m-d");
//increment 2 days
$mod_date = strtotime($date."+ 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//decrement 2 days
$mod_date = strtotime($date."- 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 month
$mod_date = strtotime($date."+ 1 months");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 year
$mod_date = strtotime($date."+ 1 years");
echo date("Y-m-d",$mod_date) . "\n";
Madhu V Rao
fuente
¿Pueden ver mi (pregunta) relacionada [ stackoverflow.com/q/61421783/8919244] ?
Faisal
8

También puedes usar el siguiente formato

strtotime("-3 days", time());
strtotime("+1 day", strtotime($date));

Puede apilar los cambios de esta manera:

strtotime("+1 day", strtotime("+1 year", strtotime($date)));

Tenga en cuenta la diferencia entre este enfoque y el de otras respuestas: en lugar de concatenar los valores +1 dayy <timestamp>, simplemente puede pasar la marca de tiempo como el segundo parámetro de strtotime.

SztupY
fuente
5

Usando una variable para Número de días

$myDate = "2014-01-16";
$nDays = 16;
$newDate = strtotime($myDate . '+ '.$nDays.'days');
echo newDate('d/m/Y', $soma); //format new date 
Carlos Martins
fuente
5

Aquí está la solución más simple para su consulta.

$date=date_create("2013-03-15"); // or your date string
date_add($date,date_interval_create_from_date_string("40 days"));// add number of days 
echo date_format($date,"Y-m-d"); //set date format of the result
Engr Atiq
fuente
2

Aquí tiene una manera fácil de resolver esto.

<?php
   $date = "2015-11-17";
   echo date('Y-m-d', strtotime($date. ' + 5 days'));
?>

La salida será:

2015-11-22

La solución ha encontrado desde aquí: cómo agregar días hasta la fecha en PHP

JoyGuru
fuente
0

Todos tienen que usar el siguiente código:

$nday = time() + ( 24 * 60 * 60);    
echo 'Now:       '. date('Y-m-d') ."\n";    
echo 'Next Day: '. date('Y-m-d', $nday) ."\n";
vikasgore
fuente
1
No deberías hacerlo de esta manera, eventualmente tendrás problemas con los segundos de salto
Nathan