Hinzufügen von Tagen zu $ ​​Date in PHP

215

Ich habe ein Datum als Teil einer mySQL-Abfrage im Formular zurückgegeben 2010-09-17

Ich möchte die Variablen $ Date2 wie folgt auf $ Date5 setzen:

$Date2 = $Date + 1

$Date3 = $Date + 2

etc..

damit es zurückkommt 2010-09-18, 2010-09-19etc ...

Ich habe versucht

date('Y-m-d', strtotime($Date. ' + 1 day'))

aber das gibt mir das Datum VORHER $Date.

Was ist der richtige Weg, um meine Daten im Format 'Ymd' zu erhalten, damit sie in einer anderen Abfrage verwendet werden können?

Istari
quelle

Antworten:

446

Alles, was Sie tun müssen, ist zu verwenden, daysanstatt daywie folgt :

<?php
$Date = "2010-09-17";
echo date('Y-m-d', strtotime($Date. ' + 1 days'));
echo date('Y-m-d', strtotime($Date. ' + 2 days'));
?>

Und es gibt richtig aus:

2010-09-18
2010-09-19
Shamittomar
quelle
7
Es gibt korrekt aus mit genauso daygut ... date("Y-m-d", strtotime('2010-09-17 + 1 day'))-> 2010-09-18, date("Y-m-d", strtotime('2010-09-17 + 2 day'))->2010-09-19
Daniel Vandersluis
Ich habe es einfach so versucht und es hat funktioniert. Ich habe immer noch keine Ahnung, warum ich einen Tag vor meinem Startdatum einen Wert erhalten habe, als ich ihn zum ersten Mal ausprobiert habe.
Istari
Was wäre, wenn ich eine Variable für die Anzahl der Tage hinzufügen müsste?
Carlos Martins
3
@ Carlos Echo Datum ("Ymd", strtotime ($ Date. '+'. $ Variable. 'Days'));
Pradeep Kumar Prabaharan
Nein, diese Methode funktioniert überhaupt nicht. Es kehrt irgendwann im Jahr 2004 zurück.
gegobyte
81

Wenn Sie PHP 5.3 verwenden, können Sie ein DateTimeObjekt und seine addMethode verwenden:

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->add(new DateInterval('P1D')); // P1D means a period of 1 day
$Date2 = $date->format('Y-m-d');

Werfen Sie einen Blick auf der DateIntervalKonstruktor Handbuch Seite zu sehen , wie andere Zeiträume zu konstruieren , um Ihr Datum hinzuzufügen (2 Tage wären 'P2D', 3 wären 'P3D', und so weiter).

Ohne PHP 5.3 sollten Sie in der Lage sein, strtotimedie Art und Weise zu verwenden, wie Sie es getan haben (ich habe es getestet und es funktioniert sowohl in 5.1.6 als auch in 5.2.10):

$Date1 = '2010-09-17';
$Date2 = date('Y-m-d', strtotime($Date1 . " + 1 day"));
// var_dump($Date2) returns "2010-09-18"
Daniel Vandersluis
quelle
Sorry Daniel, aber der Webserver läuft mit PHP 5.2.6, also wird das nicht funktionieren
Istari
2
DateTime::constructverwendet den gleichen Mechanismus wie strtotimezum Parsen des Datums, so dass Sie auch tun können, new DateTime("+1 day $date")was nicht erforderlich wäre 5.3
Gordon
Ich wollte das nicht ablehnen, aber irgendwie tat ich es = /
Steven
Dies ist die eigentliche Antwort für PHP 5.5+
TheLegendaryCopyCoder
29

Ab PHP 5.2 können Sie "Ändern" mit einem DateTime-Objekt verwenden:

http://php.net/manual/en/datetime.modify.php

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->modify('+1 day');
$Date2 = $date->format('Y-m-d');

Seien Sie vorsichtig, wenn Sie Monate hinzufügen ... (und in geringerem Maße Jahre)

Omn
quelle
Die akzeptierte Antwort gibt nur eine Antwort für mehr als 15000 Tage, wobei diese Antwort eine Antwort gibt, wenn Sie mehr als 25000 Tage hinzufügen.
Pradeep Kumar Prabaharan
Sie können dies auch auf einem DateTimeImmutable () abfragen und erhalten eine geänderte Kopie, ohne das Risiko einer Änderung des Originals.
Xavi Montero
17

Hier ist ein kleiner Ausschnitt, um die Datumsänderungen zu demonstrieren:

$date = date("Y-m-d");
//increment 2 days
$mod_date = strtotime($date."+ 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//decrement 2 days
$mod_date = strtotime($date."- 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 month
$mod_date = strtotime($date."+ 1 months");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 year
$mod_date = strtotime($date."+ 1 years");
echo date("Y-m-d",$mod_date) . "\n";
Madhu V Rao
quelle
Kannst du bitte meine verwandte (Frage) [ stackoverflow.com/q/61421783/8919244] sehen ?
Faisal
8

Sie können auch das folgende Format verwenden

strtotime("-3 days", time());
strtotime("+1 day", strtotime($date));

Sie können Änderungen folgendermaßen stapeln:

strtotime("+1 day", strtotime("+1 year", strtotime($date)));

Beachten Sie den Unterschied zwischen diesem Ansatz und dem in anderen Antworten: Anstatt die Werte +1 dayund zu verketten <timestamp>, können Sie einfach den Zeitstempel als zweiten Parameter von übergeben strtotime.

SztupY
quelle
5

Verwenden einer Variablen für die Anzahl der Tage

$myDate = "2014-01-16";
$nDays = 16;
$newDate = strtotime($myDate . '+ '.$nDays.'days');
echo newDate('d/m/Y', $soma); //format new date 
Carlos Martins
quelle
5

Hier ist die einfachste Lösung für Ihre Anfrage

$date=date_create("2013-03-15"); // or your date string
date_add($date,date_interval_create_from_date_string("40 days"));// add number of days 
echo date_format($date,"Y-m-d"); //set date format of the result
Engr Atiq
quelle
2

Hier gibt es eine einfache Möglichkeit, dies zu lösen.

<?php
   $date = "2015-11-17";
   echo date('Y-m-d', strtotime($date. ' + 5 days'));
?>

Ausgabe wird sein:

2015-11-22

Die Lösung wurde von hier aus gefunden - Hinzufügen von Tagen zum Datum in PHP

JoyGuru
quelle
0

Alle müssen den folgenden Code verwenden:

$nday = time() + ( 24 * 60 * 60);    
echo 'Now:       '. date('Y-m-d') ."\n";    
echo 'Next Day: '. date('Y-m-d', $nday) ."\n";
Vikasgore
quelle
1
Sie sollten es nicht so machen, irgendwann werden Sie Probleme mit Schaltsekunden haben
Nathan