$ Datum + 1 Jahr?

87

Ich versuche, ein Datum zu erhalten, das ein Jahr nach dem von mir angegebenen Datum liegt.

Mein Code sieht folgendermaßen aus:

$futureDate=date('Y-m-d', strtotime('+one year', $startDate));

Es wird das falsche Datum zurückgegeben. Irgendwelche Ideen warum?

Matt
quelle
9
Sie haben vergessen, über den Fehler zu berichten.
BalusC
Frank Farmer: Bist du dir so sicher? Ich würde lieber auf die Retifizierungen / Kommentare von OP warten.
BalusC
In meiner Eile, diese letzte Nacht zu posten, habe ich vergessen zu klären - es wurde das falsche Datum zurückgegeben. Es tut uns leid! Danke für Ihre Hilfe.
Matt
1
Verwenden Sie es stattdessen strtotime ('+ 1 Jahr', $ startDate));
Casivaagustin

Antworten:

97

Verwenden Sie Folgendes, um dem heutigen Datum ein Jahr hinzuzufügen:

$oneYearOn = date('Y-m-d',strtotime(date("Y-m-d", mktime()) . " + 365 day"));

Für die anderen Beispiele müssen Sie $ StartingDate mit einem Zeitstempelwert initialisieren, zum Beispiel:

$StartingDate = mktime();  // todays date as a timestamp

Versuche dies

$newEndingDate = date("Y-m-d", strtotime(date("Y-m-d", strtotime($StaringDate)) . " + 365 day"));

oder

$newEndingDate = date("Y-m-d", strtotime(date("Y-m-d", strtotime($StaringDate)) . " + 1 year"));
Nidhin Baby
quelle
Das Hinzufügen von "+365" anstelle von "+1 Jahr" hat es geschafft. Vielen Dank!
Matt
16
Würde dies nicht im Falle eines Schaltjahres brechen?
Jeremy1026
1
Ab PHP 5.1 gibt mktime () beim Aufruf ohne Argumente einen E_STRICT-Hinweis aus: Verwenden Sie stattdessen die Funktion time ().
Svandragt
Auch hier abgelehnt. Die Anzahl der Sekunden an einem Tag, Tage in einem Jahr, Sekunden in einem Jahr usw. sind alle variabel. Wenn Sie an "einem Jahr ab jetzt" interessiert sind, müssen Sie in einem Intervall von "einem Jahr" vergehen. Eine Unterteilung auf eigene Faust führt zu Fehlern bei Schalttagen und Schaltsekunden sowie zu Änderungen der Sommerzeit. Schlimmer noch, es verursacht Flappy Unit Tests.
Drobert
Warum wird meine Antwort abgelehnt? $ addierte Geldjahr = Datum ("y") + 1; // für das Hinzufügen eines Jahres, was ist daran falsch?
pathe.kiran
212
$futureDate=date('Y-m-d', strtotime('+1 year'));

$ futureDate ist in einem Jahr!

$futureDate=date('Y-m-d', strtotime('+1 year', strtotime($startDate)) );

$ futureDate ist ein Jahr ab $ startDate!

Mischo
quelle
Bitte beachten Sie, dass wenn $ startDate bereits ein Zeitstempel ist (z. B. ein zuvor mit der Funktion time () oder mktime () erstellter) und kein String, Sie ihn nicht in strtotime einschließen sollten, da er sonst nicht funktioniert. Tun Sie stattdessen $futureDate=date('Y-m-d',strtotime('+1 year',$startDate));wie unten erwähnt K Prime.
Dallas
9

Versuchen: $futureDate=date('Y-m-d',strtotime('+1 year',$startDate));

K Prime
quelle
Während dies die richtige Antwort zurückgibt, gibt die andere auch keinen Fehler zurück ... nur das falsche Datum.
SeanJA
1
strtotime wirft keine Fehler. Im Fehlerfall wird false zurückgegeben.
Frank Farmer
PHP wird Warnungen
auslösen,
Ich habe einen Fehler in Ihrem Code erhalten, zu dem ich geändert habe ,, .und es hat funktioniert date("Y-m-d",strtotime('+1 year '.$startDate)).
Muhammad Bilal
7
// Declare a variable for this year 
$this_year = date("Y");
// Add 1 to the variable
$next_year = $this_year + 1;
$year_after = $this_year + 2;

// Check your code
    echo "This year is ";
    echo $this_year;
    echo "<br />";
    echo "Next year is ";
    echo $next_year;
    echo "<br />";
    echo "The year after that is ";
    echo $year_after;
AnarchieOutlaw
quelle
6

hatte gerade das gleiche Problem, aber dies war die einfachste Lösung:

<?php (date('Y')+1).date('-m-d'); ?>
Gardenee
quelle
Großartig, ich benutze es, um das nächste Jahr zu bekommen : $next_year = (date('Y')+1).
Martin
5
//1 year from today's date
echo date('d-m-Y', strtotime('+1 year'));

//1 year from from specific date
echo date('22-09-Y', strtotime('+1 year'));

hoffe, dieser einfachere Code hilft jemandem in Zukunft :)

Entwickler
quelle
4

Ich bevorzuge den OO-Ansatz:

$date = new \DateTimeImmutable('today'); //'today' gives midnight, leave blank for current time.
$futureDate = $date->add(\DateInterval::createFromDateString('+1 Year'))

Verwenden DateTimeImmutableSie sonst das ursprüngliche Datum ändern! Weitere Informationen zu DateTimeImmutable: http://php.net/manual/en/class.datetimeimmutable.php


Wenn Sie nur ab dem heutigen Datum möchten, können Sie immer Folgendes tun:

new \DateTimeImmutable('-1 Month');
Andrew Atkinson
quelle
3

Wenn Sie PHP 5.3 verwenden, müssen Sie die Standardzeitzone festlegen:

date_default_timezone_set()
SeanJA
quelle
3

strtotime()kehrt zurück bool(false), weil es den String nicht analysieren kann '+one year'(es versteht "eins" nicht). falsewird dann implizit in den integerZeitstempel umgewandelt 0. Es ist eine gute Idee, zu überprüfen strtotime(), ob die Ausgabe nicht erfolgt, bool(false)bevor Sie sie in andere Funktionen verschieben.

Aus den Dokumenten:

Rückgabewerte

Gibt bei Erfolg einen Zeitstempel zurück, andernfalls FALSE. Vor PHP 5.1.0 gab diese Funktion bei einem Fehler -1 zurück.

Frank Farmer
quelle
Ja, guter Punkt. Mein Produktionscode wird das haben, aber ich habe mir die Haare ausgerissen, um das zum Laufen zu bringen, also habe ich es auf so wenig Code wie möglich reduziert. Vielen Dank!
Matt
2

Versuche dies

$nextyear  = date("M d,Y",mktime(0, 0, 0, date("m",strtotime($startDate)),   date("d",strtotime($startDate)),   date("Y",strtotime($startDate))+1));
Treby
quelle
1

Es gibt auch eine einfachere und weniger ausgefeilte Lösung:

$monthDay = date('m/d');
$year = date('Y')+1;
$oneYearFuture = "".$monthDay."/".$year."";
echo"The date one year in the future is: ".$oneYearFuture."";
Daniel Lima
quelle
1

Meine Lösung ist: date('Y-m-d', time()-60*60*24*365);

Sie können es mit folgenden Definitionen "lesbarer" machen:

define('ONE_SECOND', 1);
define('ONE_MINUTE', 60 * ONE_SECOND);
define('ONE_HOUR',   60 * ONE_MINUTE);
define('ONE_DAY',    24 * ONE_HOUR);
define('ONE_YEAR',  365 * ONE_DAY);

date('Y-m-d', time()-ONE_YEAR);
Adam Mester
quelle
-1

In meinem Fall (ich möchte 3 Jahre zum aktuellen Datum hinzufügen) war die Lösung:

$future_date = date('Y-m-d', strtotime("now + 3 years"));

An Gardenee, Treby und Daniel Lima: Was wird mit dem 29. Februar passieren? Manchmal hat der Februar nur 28 Tage :)

aiuen
quelle