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?


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

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"

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)


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";

¿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.


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 

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


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";

1
No deberías hacerlo de esta manera, eventualmente tendrás problemas con los segundos de salto
Nathan
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.