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?

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');

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 ()


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 .


14
<? php 

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

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

?>

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


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!


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);
}

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


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 .


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

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


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