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?

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

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

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

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.


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


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

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.


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 .

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.