2009-08-17 8 views
51

En ciertas situaciones que quiero añadir al menos 1 día para el valor de mi DATETIME variable de formato:la adición de 1 día a un valor de formato DATETIME

$start_date = date('Y-m-d H:i:s', strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}")); 

¿Cuál es la mejor manera de hacer esto?

Respuesta

34

Si usted quiere hacer esto en PHP:

// replace time() with the time stamp you want to add one day to 
$startDate = time(); 
date('Y-m-d H:i:s', strtotime('+1 day', $startDate)); 

Si desea agregar la fecha en MySQL:

-- replace CURRENT_DATE with the date you want to add one day to 
SELECT DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY); 
+0

¿esto no me da la hora actual? aún necesito mantener mi tiempo ingresado por el usuario. – ian

+0

Sí, lo hará, pero te marqué los valores que debes cambiar a la hora personalizada. Simplemente puede reemplazar 'time()' con 'strtotime (" {$ _ GET ['start_hours']}: {$ _ GET ['start_minutes']} {$ _GET ['start_ampm']} ")'. – RaYell

+0

¡esto no es ahorro de verano/invierno! Utilice la manipulación de la fecha/hora de guardado del DST – steven

8
  1. Uso strtotime para convertir la cadena en un sello de tiempo
  2. Agregue un día (por ejemplo: agregando 86400 segundos (24 * 60 * 60))

por ejemplo:

$time = strtotime($myInput); 
$newTime = $time + 86400; 

Si es sólo la adición de 1 día, a continuación, utilizando strtotime nuevo es algo excesivo.

+0

. Entonces, ¿debo convertirlo a TIMESTAMP y luego volver al formato DATETIME? – ian

+4

Supongo que también debe tenerse en cuenta que no todos los días son 24 horas de duración. En la mayoría de los lugares del mundo, el horario de verano (horario de verano) significa que un día al año es de solo 23 horas y otro día es de 25 horas. – nickf

1

Sugiero comenzar a usar Zend_Date clases desde Zend Framework. Yo sé, es un poco offtopic, pero me va a gustar esta manera :-)

$date = new Zend_Date(); 
$date->add('24:00:00', Zend_Date::TIMES); 
print $date->get(); 
151

Hay más de una manera de hacer esto con DateTime que fue introducido en PHP 5.2. A diferencia del uso de strtotime(), esto representará el horario de verano y el año bisiesto.

$datetime = new DateTime('2013-01-29'); 
$datetime->modify('+1 day'); 
echo $datetime->format('Y-m-d H:i:s'); 

// Available in PHP 5.3 

$datetime = new DateTime('2013-01-29'); 
$datetime->add(new DateInterval('P1D')); 
echo $datetime->format('Y-m-d H:i:s'); 

// Available in PHP 5.4 

echo (new DateTime('2013-01-29'))->add(new DateInterval('P1D'))->format('Y-m-d H:i:s'); 

// Available in PHP 5.5 

$start = new DateTimeImmutable('2013-01-29'); 
$datetime = $start->modify('+1 day'); 
echo $datetime->format('Y-m-d H:i:s'); 
+0

Ah, a * loop da loop *. –

+5

Si agrega más de un día, puede usar plural o singular y obtener el mismo resultado, por ejemplo: '+2 día' o' +2 días' (obviamente '+2 días' es semánticamente correcto) – timhc22

+0

¿Cuáles son las prácticas? diferencias entre estos métodos? El primer ejemplo me parece el más simple y el más semántico. – BadHorsie

9

El DateTime constructor toma un parámetro string time. $time pueden ser cosas diferentes, tiene que respetar el datetime format.

Hay algunos valores válidos como ejemplos:

  • 'now' (el valor predeterminado)
  • 2017-10-19
  • 2017-10-19 11:59:59
  • 2017-10-19 +1day

Así, en su caso, puede utilizar el seguimiento.

$dt = new \DateTime('now +1 day'); //Tomorrow 
$dt = new \DateTime('2016-01-01 +1 day'); //2016-01-02 
+3

¿Contestar sin explicación? Lea [¿Cómo escribo una buena respuesta?] (Http://stackoverflow.com/help/how-to-answer) – Shashanth