Hinzufügen eines Tages zu einem DATETIME-Formatwert

84

In bestimmten Situationen möchte ich dem Wert meiner DATETIME-formatierten Variablen 1 Tag hinzufügen:

$start_date = date('Y-m-d H:i:s', strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}"));

Was ist der beste Weg, dies zu tun?

Ian
quelle

Antworten:

61

Wenn Sie dies in PHP tun möchten:

// replace time() with the time stamp you want to add one day to
$startDate = time();
date('Y-m-d H:i:s', strtotime('+1 day', $startDate));

Wenn Sie das Datum in MySQL hinzufügen möchten:

-- replace CURRENT_DATE with the date you want to add one day to
SELECT DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY);
RaYell
quelle
Wird mir das nicht die aktuelle Zeit geben? Ich muss noch meine vom Benutzer eingegebene Zeit behalten.
ian
Ja, aber ich habe Sie markiert, welche Werte Sie in die benutzerdefinierte Zeit ändern sollten. Sie können einfach ersetzen time()mit strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}").
RaYell
Dies ist keine Sommer- / Winterzeit! Bitte verwenden Sie DST Save Date / Time Manipulation
Steven
205

Es gibt mehr als eine Möglichkeit, dies mit DateTime zu tun, das in PHP 5.2 eingeführt wurde. Im Gegensatz strtotime()dazu wird die Sommerzeit und das Schaltjahr berücksichtigt.

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

// Available in PHP 5.3

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

// Available in PHP 5.4

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

// Available in PHP 5.5

$start = new DateTimeImmutable('2013-01-29');
$datetime = $start->modify('+1 day');
echo $datetime->format('Y-m-d H:i:s');
John Conde
quelle
Ah, eine Schleife da Schleife .
Funk Forty Niner
9
Wenn Sie mehr als einen Tag hinzufügen, können Sie entweder Plural oder Singular verwenden und das gleiche Ergebnis +2 day+2 days+2 days
erzielen,
Was sind die praktischen Unterschiede zwischen diesen Methoden? Das erste Beispiel scheint mir das einfachste und semantischste zu sein.
BadHorsie
23

Der DateTime- Konstruktor akzeptiert einen Parameter string time. $timekann verschiedene Dinge sein, es muss das Datum / Uhrzeit-Format respektieren .

Es gibt einige gültige Werte als Beispiele:

  • 'now' (der Standardwert)
  • 2017-10-19
  • 2017-10-19 11:59:59
  • 2017-10-19 +1day

In Ihrem Fall können Sie also Folgendes verwenden.

$dt = new \DateTime('now +1 day'); //Tomorrow
$dt = new \DateTime('2016-01-01 +1 day'); //2016-01-02
Dmitry
quelle
3
Ohne Erklärung antworten? Lesen Wie schreibe ich eine gute Antwort?
Shashanth
10
  1. Verwenden Sie strtotimediese Option , um die Zeichenfolge in einen Zeitstempel umzuwandeln
  2. Fügen Sie einen Tag hinzu (z. B. durch Hinzufügen von 86400 Sekunden (24 * 60 * 60))

z.B:

$time = strtotime($myInput);
$newTime = $time + 86400;

Wenn nur 1 Tag hinzugefügt wird, ist die erneute Verwendung von strtotime wahrscheinlich übertrieben.

nickf
quelle
Also muss ich es in einen TIMESTAMP konvertieren und dann zurück in ein DATETIME-Format?
ian
4
Ich denke, es sollte auch beachtet werden, dass nicht jeder Tag 24 Stunden lang ist. In den meisten Ländern der Welt bedeutet Sommerzeit (Sommerzeit), dass ein Tag im Jahr nur 23 Stunden und ein anderer Tag 25 Stunden beträgt.
Nickf
UPS. Sie konvertieren eine Datums- / Uhrzeitangabe in einen Zeitstempel, sodass sie auf UTC basiert. Und UTC- Tage sind immer 24 Stunden lang. Bei der Rückkonvertierung mit date()der lokalen Zeitzone wird berücksichtigt, dass die Sommerzeit gewährleistet ist.
Rabudde
4

Sie können verwenden

$now = new DateTime();
$date = $now->modify('+1 day')->format('Y-m-d H:i:s');
Omar
quelle
1

Sie können Folgendes verwenden.

$start_date = date('Y-m-d H:i:s');
$end_date = date("Y-m-d 23:59:59", strtotime('+3 days', strtotime($start_date)));

Sie können Tage auch als konstant festlegen und wie unten verwenden.

if (!defined('ADD_DAYS')) define('ADD_DAYS','+3 days');
$end_date = date("Y-m-d 23:59:59", strtotime(ADD_DAYS, strtotime($start_date)));
user3216114
quelle
0

Verwenden der Serveranforderungszeit zum Hinzufügen von Tagen. Arbeiten wie erwartet.

25/08/19 => 27/09/19

$timestamp = $_SERVER['REQUEST_TIME'];
$dateNow = date('d/m/y', $timestamp);
$newDate = date('d/m/y', strtotime('+2 day', $timestamp));

Hier '+2 Tage', um eine beliebige Anzahl von Tagen hinzuzufügen.

Niroshan
quelle
0

Es gibt eine präzisere und intuitivere Möglichkeit, dem PHP-Datum Tage hinzuzufügen. Versteh mich nicht falsch, diese PHP-Ausdrücke sind großartig, aber du musst immer googeln, wie man sie behandelt. Ich vermisse die automatische Vervollständigung dafür.

So gehe ich gerne mit diesen Fällen um:

(new Future(
    new DateTimeFromISO8601String('2014-11-21T06:04:31.321987+00:00'),
    new OneDay()
))
    ->value();

Für mich ist es viel intuitiver und die automatische Vervollständigung funktioniert sofort. Sie müssen nicht jedes Mal nach der Lösung googeln.

Als netter Bonus müssen Sie sich keine Gedanken über die Formatierung des resultierenden Werts machen, er ist bereits im ISO8601-Format.

Dies ist eine Baiser-Bibliothek. Weitere Beispiele finden Sie hier .

Vadim Samokhin
quelle