web-dev-qa-db-fra.com

$ date + 1 an?

J'essaie d'obtenir une date correspondant à un an à compter de la date que je précise.

Mon code ressemble à ceci:

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

Ça retourne la mauvaise date. Des idées pourquoi?

72
Matt

Pour ajouter une année à la date d'aujourd'hui, utilisez ce qui suit:

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

Pour les autres exemples, vous devez initialiser $ StartingDate avec une valeur d'horodatage, par exemple:

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

Essaye ça

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

ou

$newEndingDate = date("Y-m-d", strtotime(date("Y-m-d", strtotime($StaringDate)) . " + 1 year"));
82
Nidhin Baby
$futureDate=date('Y-m-d', strtotime('+1 year'));

$ futureDate est dans un an!

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

$ futureDate est dans un an à partir de $ startDate!

187
Misho

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

8
K Prime
// 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
AnarchyOutlaw

vient d'avoir le même problème, cependant c'était la solution la plus simple:

<?php (date('Y')+1).date('-m-d'); ?>
5
Gardenee
//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'));

espérons que ce morceau de code plus simple aidera quelqu'un à l'avenir :)

3
Developer

Je préfère l'approche OO:

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

Utilisez DateTimeImmutable sinon vous modifierez aussi la date d'origine! plus sur DateTimeImmutable: http://php.net/manual/en/class.datetimeimmutable.php


Si vous voulez juste à partir de la date d'aujourd'hui, vous pouvez toujours faire:

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

Si vous utilisez PHP 5.3, c’est parce que vous devez définir le fuseau horaire par défaut:

date_default_timezone_set()
2
SeanJA

strtotime() renvoie bool(false), car il ne peut pas analyser la chaîne '+one year' (il ne comprend pas "un"). false est alors implicitement converti en integer horodatage 0. C'est une bonne idée de vérifier la sortie de strtotime() n'est pas bool(false) avant de la déplacer dans d'autres fonctions.

à partir de la documentation:

Valeurs de retour

Renvoie un horodatage en cas de succès, FALSE sinon. Avant de PHP 5.1.0, cette fonction renverrait -1 en cas d'échec.

2
Frank Farmer

Essaye ça

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

Il existe également une solution plus simple et moins sophistiquée:

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