web-dev-qa-db-fra.com

Date actuelle + 2 mois

J'ai écrit ce morceau de code afin d'afficher la date actuelle + 2 mois:

<?php
    $date = date("d/m/Y");
    $date = strtotime(date("d/m/Y", strtotime($date)) . "+2 months");
    $date = date("d/m/Y",$date);
    echo $date;
?>

Il ne semble pas fonctionner comme il s'affiche: 01/03/1970.

Qu'est-ce que je fais mal?

Merci de votre aide.

ÉDITER :

Après avoir lu les commentaires et les réponses, je l'ai simplifié et corrigé.

<?php
    $date = date("d/m/Y", strtotime(" +2 months"));
    echo $date;
?>
17
morgi

Il vous manque le deuxième argument pour le deuxième appel de strtotime():

echo date('d/m/Y', strtotime('+2 months'));
35
Alix Axel

Essayez d'utiliser objet DateTime :

$date = new DateTime("+2 months");
echo $date->format("d/m/Y");
11
John Conde

Si aujourd'hui est "AAAA-mm-31" et que le mois suivant n'a pas le 31ème jour, il affichera le mois suivant de ce jour, faire afficher par le système le résultat "+3 mois" au lieu du résultat "+2 mois".

Donc je suppose que c'est le plus de sécurité:

$end_date=date("Y-m-d",strtotime("+2 month",strtotime(date("Y-m-01",strtotime("now") ) )));

Modifiez d'abord la date au 1er jour.

3
Fenix Lam

Utiliser DateTime-> add () ou DateTime-> modifier ()

Si vous travaillez avec un objet DateTime existant, vous pouvez utiliser l'un de ces éléments:

// Your date
$date = new DateTime(); // empty for now or pass any date string as param

// Adding
$date->add(new DateInterval('P2M')); // where P2M means "plus 2 months"

// or even easier
$date->modify('+2 months');

// Checking
echo $date->format('Y-m-d');

Attention à l'ajout de mois en PHP, il peut déborder au mois suivant si le jour de la date d'origine est supérieur au nombre total de jours dans le nouveau mois. Le même débordement se produit avec les années bissextiles lors de l'ajout d'années. D'une certaine manière, cela n'est pas considéré comme un bogue par les développeurs PHP et est simplement documenté sans solution. Plus ici: PHP DateTime :: modifier l'ajout et la soustraction de mois

J'ai trouvé que c'était la solution la plus pertinente pour résoudre le problème de débordement:

$day = $date->format('j');
$date->modify('first day of +2 months')->modify('+'. (min($day, $date->format('t')) - 1) .' days');
1
Alph.Dev