2010-09-16 26 views
128

que tienen una fecha devuelve como parte de una consulta MySQL en forma 2010-09-17

me gustaría establecer las variables $ FECHA2 a $ Date5 de la siguiente manera:

$Date2 = $Date + 1

$Date3 = $Date + 2

etc ..

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

He tratado

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

pero esto me da la fecha antes de $Date.

Cuál es la forma correcta para conseguir mis fechas en el formulario formato 'Y-m-d' para que puedan ser utilizados en otra consulta?

+0

posible duplicado del [futuro Cálculo de PHP fecha al agregar días a una fecha variable] (http://stackoverflow.com/questions/2692679/php-c alculating-future-date-by-adding-days-to-a-variable-date) – Gordon

Respuesta

272

Todo lo que tienes que hacer es usar days en lugar de day así:

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

Y emite correctamente:

2010-09-18 
2010-09-19 
+4

It salidas correctamente usando solo 'day' también ...' date ("Ymd", strtotime ('2010-09-17 + 1 day')) '->' 2010-09-18', 'date (" Ymd " , strtotime ('2010-09-17 + 2 day')) '->' 2010-09-19' –

+0

Lo intenté de esta manera y funcionó. Todavía no tengo idea de por qué obtuve un valor un día antes de la fecha de inicio cuando lo probé inicialmente. – Istari

+0

¿Qué sucede si tengo una variable para el número de días para agregar? –

52

Si está usando PHP 5.3, se puede utilizar un objeto DateTime y su add mé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'); 

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

Sin PHP 5.3, usted debe ser capaz de utilizar strtotime la forma en que lo hizo (Lo he probado y funciona tanto en 5.1.6 y 5.2.10):

$Date1 = '2010-09-17'; 
$Date2 = date('Y-m-d', strtotime($Date1 . " + 1 day")); 
// var_dump($Date2) returns "2010-09-18" 
+0

Lo siento Daniel, pero el servidor web ejecuta php 5.2.6, por lo que esto no funcionará – Istari

+1

'DateTime :: construct' utiliza el mismo mecanismo como 'strtotime' para analizar la fecha, por lo que también puede hacer' new DateTime ("+ 1 day $ date") 'que no requeriría 5.3 – Gordon

+0

No quise declinar esto, pero de alguna manera lo hice =/ – Stevus

0

Todos tienen que usar el código de abajo:

$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 bisiestos – Nathan

7

También puede utilizar 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))); 

Nota la diferencia entre este enfoque y el de otras respuestas: en lugar de la concatenación de los valores y +1 day<timestamp>, sólo puede pasar en la marca de tiempo como el segundo párrafo metro de strtotime.

13

Aquí es un pequeño fragmento de 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"; 
1

Usando una variable para el 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 
11

Desde PHP 5.2 en la que se puede utilizar 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)

+0

respuesta aceptada solo da respuesta durante más de 15000 días donde esta respuesta da respuesta cuando agregas 25000+ días también .. –

1

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

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

de salida será:

2015-11-22 

solución ha encontrado de aquí - How to Add Days to Date in PHP

1

Aquí es la solución más sencilla a la 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 
Cuestiones relacionadas