PHP, obtener la fecha de mañana desde la fecha

88

Tengo una fecha de PHP en forma de 2013-01-22y quiero obtener la fecha de mañana en el mismo formato, por ejemplo 2013-01-23.

¿Cómo es esto posible con PHP?

Justin
fuente

Respuestas:

201

Usar DateTime

$datetime = new DateTime('tomorrow');
echo $datetime->format('Y-m-d H:i:s');

O:

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

O:

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

O en PHP 5.4+:

echo (new DateTime('2013-01-22'))->add(new DateInterval("P1D"))
                                 ->format('Y-m-d H:i:s');
John Conde
fuente
1
Esto usa corriente, necesito pasar una fecha determinada.
Justin
La segunda forma es probablemente la mejor.
nickb
72
 $tomorrow = date("Y-m-d", strtotime('tomorrow'));

o

  $tomorrow = date("Y-m-d", strtotime("+1 day"));

Enlace de ayuda: STRTOTIME ()

Laura Chesches
fuente
1
Usé esta y de todas las respuestas es la versión más corta y simple, ¡gracias!
Bombelman
17

Desde que etiquetó esto con , puedes usarlo con el +1 daymodificador así:

$tomorrow_timestamp = strtotime('+1 day', strtotime('2013-01-22'));

Dicho esto, es una solución mucho mejor usar DateTime .

Rudi Visser
fuente
14
<? php 

//1 Day = 24*60*60 = 86400

echo date("d-m-Y", time()+86400); 

?>
Andy
fuente
17
Tenga en cuenta que esto fallará en casos extremos (horario de verano).
JJJ
Esta respuesta es incorrecta. Tengo un cronjob que usa esto en un bucle y el sistema murió.
jewelnguyen8
5

echo date ('Y-m-d',strtotime('+1 day', strtotime($your_date)));

ABDUL JAMAL
fuente
3

Utilizar DateTime:

Para obtener mañana a partir de ahora:

$d = new DateTime('+1day');
$tomorrow = $d->format('d/m/Y h.i.s');
echo $tomorrow;

Resultados: 28/06/2017 13.08.20

Para obtener mañana de una cita:

$d = new DateTime('2017/06/10 08.16.35 +1day')
$tomorrow = $d->format('d/m/Y h.i.s');
echo $tomorrow;

Resultados: 06/11/2017 16/08/35

¡Espero eso ayude!

Gregorio
fuente
1
/**
 * get tomorrow's date in the format requested, default to Y-m-d for MySQL (e.g. 2013-01-04)
 *
 * @param string
 *
 * @return string
 */
public static function getTomorrowsDate($format = 'Y-m-d')
{
    $date = new DateTime();
    $date->add(DateInterval::createFromDateString('tomorrow'));

    return $date->format($format);
}
crmpicco
fuente
1

Por extraño, puede parecer que funciona perfectamente bien: date_create( '2016-02-01 + 1 day' );

echo date_create( $your_date . ' + 1 day' )->format( 'Y-m-d' );

Deberías hacerlo

Diogo Neves - Mangaru
fuente
0

Primero, encontrar abstracciones correctas es siempre una clave. clave para la legibilidad, mantenibilidad y extensibilidad.

Aquí, un candidato bastante obvio es un ISO8601DateTime. Hay al menos dos implementaciones: la primera es una fecha y hora analizada de una cadena y la segunda es mañana. Por lo tanto, hay dos clases que se pueden usar y su combinación da como resultado el resultado (casi) deseado:

new Tomorrow(new FromISO8601('2013-01-22'));

Ambos objetos tienen una fecha y hora ISO8601, por lo que su representación textual no es exactamente lo que necesita. Entonces, el trazo final es hacer que tomen una forma de fecha:

new Date(
    new Tomorrow(
        new FromISO8601('2013-01-22')
    )
);

Ya que necesita una representación textual, no solo un objeto, invoca un value() método.

Para obtener más información sobre este enfoque, consulte esta publicación .

Vadim Samokhin
fuente
-1

aquí está la función de trabajo

function plus_one_day($date){
 $date2 = formatDate4db($date);
 $date1 = str_replace('-', '/', $date2);
 $tomorrow = date('Y-m-d',strtotime($date1 . "+1 days"));
 return $tomorrow; }
Muhammad Awais Zulifqar
fuente
¿Qué hace la función formatDate4db? ¿Por qué reemplazar los guiones con barras en la cadena?
braindigitalis
La función formatDate4db pasa la fecha y crea un formato como el formato mysql de la base de datos y la función str_replace, tengo el formato de fecha 2019/12/10 y lo reemplazo con -
Muhammad Awais Zulifqar
-4
$date = '2013-01-22';
$time = strtotime($date) + 86400;
echo date('Y-m-d', $time);

Donde 86400 es el número de segundos en un día.

Jason
fuente
11
No, un día no siempre tiene 86400 segundos.
nickb
No entiendo el problema. Por favor explique @nickb
Aiyion.Prime
@ Aiyion.Los días principales que hacen el cambio hacia o desde el horario de verano no tienen 86400 segundos
dumazy
Pensé en eso, el horario de verano se inicia a las dos en punto y, por lo tanto, nunca debería resultar en una fecha diferente.
Aiyion.Prime
El problema no es el horario de verano. Las horas en una base de datos realmente deberían almacenarse como UTC, que no tiene horario de verano. Si está almacenando sus fechas en UTC, esto funcionará bien, pero es un poco obtuso.
braindigitalis