Hinzufügen von drei Monaten zu einem Datum in PHP

87

Ich habe eine Variable namens $effectiveDatemit dem Datum 2012-03-26 .

Ich versuche, diesem Datum drei Monate hinzuzufügen, und bin dabei nicht erfolgreich gewesen.

Folgendes habe ich versucht:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate));

und

$effectiveDate = strtotime(date("Y-m-d", strtotime($effectiveDate)) . "+3 months");

Was mache ich falsch? Keiner der Codes funktionierte.

user979331
quelle
6
Was bedeutet "hat nicht funktioniert"?
Jon
2
Ich bekomme 1340649000als Antwort, was richtig zu sein scheint.
Dogbert
Sind Sie sicher, $effectiveDatespeichert, was Sie denken, dass es speichert? Es funktioniert bei mir .
Josh
Ich erwarte dieses Datum bis 2012-06-26
füge
Und date('Y-m-d', 1340661600)gibt 2012-06-26was richtig ist.
Tchoupi

Antworten:

186

Wenn Sie dies ändern, erhalten Sie das erwartete Format:

$effectiveDate = date('Y-m-d', strtotime("+3 months", strtotime($effectiveDate)));
Tchoupi
quelle
Wie gehe ich mit einer Variablen von Monaten um? Wie $ Monate enthält die Anzahl der Monate? "+ '$months' months"funktioniert nicht
HKK
4
$offset = 5; echo date('Y-m-d', strtotime("+$offset months", strtotime('2000-01-01'))); Demo
Cees Timmerman
date () verwendet keine Lokalisierungen. Besser ist strftime ().
user706420
2
Das funktioniert nicht für Daten wie diese: Datum ('2018-01-31', Strtotime ('+ 3 Monate')). Wenn das Datum auf 31 endet und die nächsten 3 Monate nicht, wird nicht das richtige Datum zurückgegeben.
Dan H
3
keine gute Lösung - gibt keine korrekten Werte zurück - wie Dan H erwähnte
Josef Vancura
17

Diese Antwort ist nicht genau auf diese Frage. Aber ich werde dies hinzufügen, da diese Frage noch durchsuchbar ist, wie der Zeitraum vom Datum hinzugefügt / abgezogen werden kann.

$date = new DateTime('now');
$date->modify('+3 month'); // or you can use '-90 day' for deduct
$date = $date->format('Y-m-d h:i:s');
echo $date;
Sadee
quelle
1
Dies funktioniert perfekt mit einem wesentlich moderneren Ansatz als die akzeptierte Antwort. Danke dir.
Tarquin
5

Ich gehe davon aus, dass mit "hat nicht funktioniert" gemeint ist, dass Sie anstelle des formatierten Datums einen Zeitstempel erhalten, weil Sie es richtig gemacht haben:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate)); // returns timestamp
echo date('Y-m-d',$effectiveDate); // formatted version
Nick
quelle
3

Tchoupis Antwort kann etwas weniger ausführlich formuliert werden, indem das Argument für strtotime () wie folgt verkettet wird:

$effectiveDate = date('Y-m-d', strtotime($effectiveDate . "+3 months") );

(Dies hängt von den Details der magischen Implementierung ab, aber Sie können sie sich jederzeit ansehen, wenn Sie zu Recht misstrauisch sind.)

gleech
quelle
2

Sie müssen das Datum in einen lesbaren Wert umwandeln. Sie können strftime () oder date () verwenden.

Versuche dies:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate));
$effectiveDate = strftime ( '%Y-%m-%d' , $effectiveDate );
echo $effectiveDate;

Das sollte funktionieren. Ich mag es besser, strftime zu verwenden, da es für die Lokalisierung verwendet werden kann, die Sie vielleicht ausprobieren möchten.

JohnnyQ
quelle
2

Folgendes sollte funktionieren. Bitte versuchen Sie Folgendes:

$effectiveDate = strtotime("+1 months", strtotime(date("y-m-d")));
echo $time = date("y/m/d", $effectiveDate);
Dipak kukadiya
quelle
1

Folgendes sollte funktionieren

$d = strtotime("+1 months",strtotime("2015-05-25"));
echo   date("Y-m-d",$d); // This will print **2015-06-25** 
Ricky
quelle
1

Fügen Sie n-te Tage, Monate und Jahre hinzu

$n = 2;
for ($i = 0; $i <= $n; $i++){
    $d = strtotime("$i days");
    $x = strtotime("$i month");
    $y = strtotime("$i year");
    echo "Dates : ".$dates = date('d M Y', "+$d days");
    echo "<br>";
    echo "Months : ".$months = date('M Y', "+$x months");
    echo '<br>';
    echo "Years : ".$years = date('Y', "+$y years");
    echo '<br>';
}
Rahul Gandhi
quelle
0

Folgendes sollte funktionieren, aber möglicherweise müssen Sie das Format ändern:

echo date('l F jS, Y (m-d-Y)', strtotime('+3 months', strtotime($DateToAdjust)));
Brendon Dugan
quelle