110 votes

Ajout de trois mois à une date en PHP

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

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

Voici ce que j'ai essayé :

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

y

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

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

6 votes

Que signifie "n'a pas fonctionné" ?

2 votes

Je reçois 1340649000 comme réponse, ce qui semble être correct.

0 votes

Vous êtes sûr $effectiveDate stocke ce que vous pensez qu'il stocke ? Cela fonctionne pour moi .

236voto

iMat Points 10229

En le changeant en ceci, vous obtiendrez le format attendu :

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

0 votes

Comment faire avec une variable de mois ? comme $months contient le nombre de mois ? "+ '$months' months" ne fonctionne pas

7 votes

$offset = 5; echo date('Y-m-d', strtotime("+$offset months", strtotime('2000-01-01'))); Démo

0 votes

Date() n'utilisent pas les localisations. Le mieux est strftime().

37voto

Sadee Points 25

Cette réponse ne correspond pas exactement à cette question. Mais je vais l'ajouter puisque cette question peut toujours faire l'objet d'une recherche 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;

6voto

Nick Points 4016

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

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

4voto

JohnnyQ Points 1809

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

Essayez ça :

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

Cela devrait fonctionner. Je préfère utiliser strftime car il peut être utilisé pour la localisation, vous pouvez l'essayer.

3voto

gleech Points 112

Tchoupi's 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 d'implémentation magiques, mais vous pouvez toujours aller y jeter un œil si vous êtes à juste titre méfiant).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X