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?

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

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


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 .


13
<? php 

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

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

?>

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


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!


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

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


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 .


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

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.