PHP, Holen Sie sich das Datum von morgen ab Datum

88

Ich habe ein PHP-Datum in Form von 2013-01-22und möchte das Datum von morgen im gleichen Format erhalten, so zum Beispiel 2013-01-23.

Wie ist das mit PHP möglich?

Justin
quelle

Antworten:

200

Verwenden Sie DateTime

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

Oder:

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

Oder:

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

Oder in PHP 5.4+:

echo (new DateTime('2013-01-22'))->add(new DateInterval("P1D"))
                                 ->format('Y-m-d H:i:s');
John Conde
quelle
1
Dies verwendet Strom, ich muss in einem bestimmten Datum übergeben.
Justin
2. Weg ist wahrscheinlich am besten.
Nickb
71
 $tomorrow = date("Y-m-d", strtotime('tomorrow'));

oder

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

Hilfelink : STRTOTIME ()

Laura Chesches
quelle
1
Ich habe diese eine verwendet und von allen Antworten ist die kürzeste und einfachste Version, danke!
Bombelman
17

Da hast du das mit getaggt können Sie es mit dem +1 dayModifikator wie folgt verwenden:

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

Das heißt, es ist eine viel bessere Lösung, DateTime zu verwenden .

Rudi Visser
quelle
13
<? php 

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

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

?>
Andy
quelle
17
Beachten Sie, dass dies in Randfällen fehlschlägt (Sommerzeit).
JJJ
Diese Antwort ist falsch. Ich habe einen Cronjob, der dies in einer Schleife verwendet, und das System ist gestorben.
Jewelnguyen8
5

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

ABDUL JAMAL
quelle
3

Verwendung DateTime:

Um morgen von jetzt an zu kommen:

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

Ergebnisse: 28/06/2017 08.13.20

Um morgen von einem Date zu bekommen:

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

Ergebnisse: 11/06/2017 08.16.35

Ich hoffe es hilft!

Gregorio
quelle
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
quelle
1

Seltsamerweise kann es scheinen, dass es vollkommen gut funktioniert: date_create( '2016-02-01 + 1 day' );

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

Sollte es tun

Diogo Neves - Mangaru
quelle
0

Erstens ist es immer ein Schlüssel, korrekte Abstraktionen zu finden. Schlüssel zur Lesbarkeit, Wartbarkeit und Erweiterbarkeit.

Hier ist ein ganz offensichtlicher Kandidat ein ISO8601DateTime. Es gibt mindestens zwei Implementierungen: Die erste ist eine analysierte Datums- / Uhrzeitangabe aus einer Zeichenfolge und die zweite ist morgen. Daher können zwei Klassen verwendet werden, und ihre Kombination führt zu (fast) gewünschten Ergebnissen:

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

Beide Objekte haben eine ISO8601-Datums- / Uhrzeitangabe, sodass ihre Textdarstellung nicht genau Ihren Anforderungen entspricht. Der letzte Strich besteht also darin, sie in eine Datumsform zu bringen:

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

Da Sie eine Textdarstellung benötigen, nicht nur ein Objekt, rufen Sie eine value()Methode auf.

Weitere Informationen zu diesem Ansatz finden Sie in diesem Beitrag .

Vadim Samokhin
quelle
-1

Hier ist die Arbeitsfunktion

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
quelle
Was macht die Funktion formatDate4db? Warum die Bindestriche durch Schrägstriche in der Zeichenfolge ersetzen?
Braindigitalis
formatDate4db Funktion übergeben das Datum und es macht ein Format wie Datenbank MySQL-Format und str_replace-Funktion, ich habe Datumsformat 2019/12/10 und ersetzen durch -
Muhammad Awais Zulifqar
-4
$date = '2013-01-22';
$time = strtotime($date) + 86400;
echo date('Y-m-d', $time);

Wobei 86400 die Anzahl der Sekunden an einem Tag ist.

Jason
quelle
11
Nein, ein Tag hat nicht immer 86400 Sekunden.
Nickb
Ich verstehe das Problem nicht. Bitte erklären Sie @nickb
Aiyion.Prime
@ Aiyion.Prime Tage, die den Wechsel zur oder von der Sommerzeit machen, haben keine 86400 Sekunden
dumazy
Ich dachte daran, die Sommerzeit wird um zwei Uhr eingeleitet und sollte daher niemals zu einem anderen Datum führen?
Aiyion.Prime
Das Problem ist nicht die Sommerzeit. Zeiten in einer Datenbank sollten wirklich als UTC gespeichert werden, die keine Sommerzeit hat. Wenn Sie Ihre Daten in UTC speichern, funktioniert dies einwandfrei, ist jedoch etwas stumpf.
Braindigitalis