$ 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?


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

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!


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


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;

6

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

<?php (date('Y')+1).date('-m-d'); ?>

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


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

3

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

date_default_timezone_set()

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.


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

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

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

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

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.