PHP, ottieni la data di domani dalla data


88

Ho una data PHP sotto forma di 2013-01-22e voglio ottenere la data di domani nello stesso formato, quindi per esempio 2013-01-23.

Com'è possibile con PHP?

Risposte:


201

Usa 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 in PHP 5.4+:

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

1
Questo utilizza la corrente, devo passare in una determinata data.
Justin

Il secondo modo è probabilmente il migliore.
nickb

72
 $tomorrow = date("Y-m-d", strtotime('tomorrow'));

o

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

Link della guida: STRTOTIME ()


1
Ho usato questo e di tutte le risposte è la versione più breve e più semplice, grazie!
Bombelman

17

Dato che l'hai etichettato con , puoi usarlo con il +1 daymodificatore in questo modo:

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

Detto questo, è una soluzione molto migliore usare DateTime .


14
<? php 

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

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

?>

17
Notare che questo fallirà nei casi limite (ora legale).
JJJ

Questa risposta è sbagliata. Ho un cronjob che lo usa in un ciclo e il sistema è morto.
jewelnguyen8


3

Usa DateTime:

Per arrivare domani da adesso:

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

Risultati: 28/06/2017 08.13.20

Per ottenere domani da una data:

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

Risultati: 11/06/2017 08.16.35

Spero che sia d'aiuto!


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

Per strano può sembrare che funzioni perfettamente bene: date_create( '2016-02-01 + 1 day' );

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

Dovrebbe farlo


0

In primo luogo, inventare astrazioni corrette è sempre una chiave. chiave per leggibilità, manutenibilità ed estendibilità.

Qui, il candidato abbastanza ovvio è un file ISO8601DateTime. Ci sono almeno due implementazioni: la prima è un datetime analizzato da una stringa e la seconda è domani. Quindi, ci sono due classi che possono essere utilizzate e la loro combinazione produce un risultato (quasi) desiderato:

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

Entrambi gli oggetti sono un datetime ISO8601, quindi la loro rappresentazione testuale non è esattamente ciò di cui hai bisogno. Quindi il colpo finale è farli assumere una forma data:

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

Poiché hai bisogno di una rappresentazione testuale, non solo di un oggetto, invoca un value()metodo.

Per ulteriori informazioni su questo approccio, dai un'occhiata a questo post .


-1

ecco la funzione di lavoro

function plus_one_day($date){
 $date2 = formatDate4db($date);
 $date1 = str_replace('-', '/', $date2);
 $tomorrow = date('Y-m-d',strtotime($date1 . "+1 days"));
 return $tomorrow; }

cosa fa la funzione formatDate4db? Perché sostituire i trattini con barre nella stringa?
braindigitalis

La funzione formatDate4db passa la data e crea un formato come il formato database mysql e la funzione str_replace, ho il formato data 2019/12/10 e lo sostituisco con -
Muhammad Awais Zulifqar

-4
$date = '2013-01-22';
$time = strtotime($date) + 86400;
echo date('Y-m-d', $time);

Dove 86400 è il numero di secondi in un giorno.


11
No, un giorno non ha sempre 86400 secondi.
nickb

Non ho capito il problema. Per favore, spiega @nickb
Aiyion.Prime

@ Aiyion.I primi giorni che effettuano il passaggio da o verso l'ora legale non hanno 86400 secondi
dumazy

Ho pensato a questo, l'ora legale inizia alle due e quindi non dovrebbe mai risultare in una data diversa?
Aiyion.Prime

Il problema non è l'ora legale. Gli orari in un database dovrebbero essere memorizzati come UTC che non ha l'ora legale. Se stai memorizzando le tue date in UTC, funzionerà bene ma è un po 'ottuso.
braindigitalis
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.