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?


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

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"

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)


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

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.


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 

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

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


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

1
Sie sollten es nicht so machen, irgendwann werden Sie Probleme mit Schaltsekunden haben
Nathan
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.