Ajouter trois mois à une date en PHP

90

J'ai une variable appelée $effectiveDatecontenant la date 2012-03-26 .

J'essaie d'ajouter trois mois à cette date et je n'y parviens pas.

Voici ce que j'ai essayé:

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

et

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

Qu'est-ce que je fais mal? Aucun des deux morceaux de code n'a fonctionné.

user979331
la source
6
Que signifie «n'a pas fonctionné»?
Jon
2
J'obtiens une 1340649000réponse, ce qui semble être correct.
Dogbert
Êtes-vous sûr de $effectiveDatestocker ce que vous pensez qu'il stocke? Cela fonctionne pour moi .
Josh
J'attends cette date au 26/06/2012, ajoutant 3 mois au
26/03/2012
Et date('Y-m-d', 1340661600)donne 2012-06-26ce qui est correct.
Tchoupi

Réponses:

193

Changez-le en ceci vous donnera le format attendu:

$effectiveDate = date('Y-m-d', strtotime("+3 months", strtotime($effectiveDate)));
Tchoupi
la source
Comment gérer une variable de mois? comme $ mois contient le nombre de mois? "+ '$months' months"ne fonctionne pas
HKK
4
$offset = 5; echo date('Y-m-d', strtotime("+$offset months", strtotime('2000-01-01'))); Démo
Cees Timmerman
date () n'utilise pas les localisations. Mieux vaut strftime ().
user706420
2
Cela ne fonctionnera pas pour des dates comme celle-ci: date ('2018-01-31', strtotime ('+ 3 mois')). Si la date se termine dans 31 et pas les 3 prochains mois, il ne renverra pas la date correcte.
Dan H
3
pas une bonne solution - ne renvoie pas les valeurs correctes - comme l'a mentionné Dan H
Josef Vancura
17

Cette réponse n'est pas exactement à cette question. Mais j'ajouterai ceci puisque cette question est toujours consultable pour savoir comment ajouter / déduire la période de la date.

$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
la source
5

Je suppose que par "n'a pas fonctionné", vous voulez dire qu'il vous donne un horodatage au lieu de la date formatée, car vous le faisiez correctement:

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

Vous devez convertir la date en une valeur lisible. Vous pouvez utiliser strftime () ou date ().

Essaye ça:

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

Cela devrait fonctionner. J'aime mieux utiliser strftime car il peut être utilisé pour la localisation, vous voudrez peut-être l'essayer.

JohnnyQ
la source
3

La réponse de Tchoupi peut être rendue un peu moins verbeuse en concaténant l'argument de strtotime () comme suit:

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

(Cela repose sur des détails de mise en œuvre magiques, mais vous pouvez toujours les consulter si vous vous méfiez à juste titre.)

gleech
la source
2

Les éléments suivants devraient fonctionner, veuillez essayer ceci:

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

La suite devrait fonctionner

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

Ajouter les nièmes jours, mois et années

$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
la source
0

Ce qui suit devrait fonctionner, mais vous devrez peut-être changer le format:

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