Tuto PHP : comment ajouter des jours / mois / années à une date donnée

La gestion des dates en PHP  est une partie assez complexe de ce langage de programmation, qui fait appel à une 50 aine de fonctions dédiées.
Dans cet article, vous trouverez des bouts de code très simples qui permettent de calculer une date future en fonction d’une date donnée et d’une durée.

Ces quelques exemples sont capables de gérer le changement d’année –si vous voulez rajouter 15 jours à partir du 25 décembre par éxemple-, de mois et aussi les années bissextiles.

Afficher la date du jour en PHP

Commençons ce tuto par l’affichage de la date du jour dans les 2 formats les  plus utilisés :

  • Date du jour complète avec l’heure :
    echo date(‘Y-m-d H:i:s’);
    //affiche 2013-09-03 11:38:18 – C’est aussi le format des colonnes DATETIME de MySQL
  • Date du jour simple :
    echo date(‘Y-m-d’);
    //affiche 2013-09-03 (format AAAA-MM-JJ)

Dans ces deux exemples, la casse des des paramètres qui sont passés à la fonction date est importante : majuscule ou minuscule va changer le format de sortie.
Chaque paramètre peut être separé par le caractère que vous souhaitez : dans nos exemples, nous avons utilisé l’espace, le tiret et les deux points.

Ajouter des jours à la date du jour

//Ajout de 15 jours
echo date(‘d-m-Y’, strtotime(‘+15 days’));

//Ajout de 20 jours
echo date(‘d-m-Y’, strtotime(‘+20 days’));

Vous l’aurez compris, le nombre après le ‘+’  correspond au nombre de  jours que vous voulez rajouter.
Le fonctionnement est identique pour les exemples suivants.

Ajouter des mois à la date du jour

//Ajout de 1 mois
echo date(‘d-m-Y’, strtotime(‘+1 month’));

//Ajout de 2 mois
echo date(‘d-m-Y’, strtotime(‘+2 month’));

Ajouter des années à la date du jour

//Ajout de 1 année
echo date(‘d-m-Y’, strtotime(‘+1 year’));

//Ajout de 2 années
echo date(‘d-m-Y’, strtotime(‘+2 year’));

strtotime() permet d’aller encore plus loin en ajoutant des minutes, des secondes, des heures, …
Je vous invite à consulter le guide de la fonction strtotime() sur php.net.

 

Calculer la date future par rapport à n’importe quelle date donné (pas forcément la date du jour)?

//date de départ : 01 avril 2013
$dateDepart = ’01-04-2013′;

//durée à rajouter : 6 mois;
$duree = 6;

//la première étape est de transformer cette date en timestamp
$dateDepartTimestamp = strtotime($dateDepart);

//on calcule la date de fin
$dateFin         = date(‘d-m-Y’, strtotime(‘+’.$duree.’ month’, $dateDepartTimestamp ));

Les explications du calcul effectué dans $dateFin

  • On appelle la fonction date() qui va nous renvoyer une date au format demandé, c’est à dire JJ-MM-AAAA (c’est le premier argument : ‘d-m-Y’)
    Si le 2eme argument est renseigné, elle renvoie la date par rapport au timestamp fourni. C’est pour ça que nous l’avons calculé dans $dateDepartTimestamp
  • Dans le deuxième argument, on va calculer le timestamp correspondant à la date de départ + la durée (6 mois) grâce à la fonction strtotime()
Jérôme pasquelin - jeromeweb

Entrepreneur et Geek depuis plus de 20 ans.

Entrepreneur et Geek depuis plus de 20 ans.

13 Comments

  1. Brice

    Un grand merci pour ce post. Je ne connaissais pas la fonction mais elle s’avère très utile !

  2. John@Code de la route

    Merci !

    J’ai tapé calculer date php, premier résultat toi. tout de suite je trouve l’information. Si seulement ça se passait toujours comme ça. Mille merci mec !

  3. Tom@Communiqué de presse

    Je ne me rappelais plus de la fonction, donc merci pour le rappel, même si je crois bien qu’il y a une autre solution plus efficace encore (mais orienté objet)

  4. tom

    regarde du coté de la class datetime, bien plus pratique de nos jours…

  5. jeromeweb Author

    Hello Tom, je vais refaire ça à l’occasion.
    Le plus pratique quand même c’est un bon drop database sur dom/boubadom lol (ou beta/tomate ça dépend ^^)

  6. Delphine

    Merci bien pour ce petit tuto plein d’astuces !

    Juste pour préciser.. Que l’on ajoute des : secondes, des minutes, des heures, des mois, des jours, des années..

    Chacun d’eux doit être impérativement au SINGULIER.

    Donc dans le tuto il faudrait juste passer ça :

    echo date(‘d-m-Y’, strtotime(‘+15 days’));

    En ça :

    echo date(‘d-m-Y’, strtotime(‘+15 day’));

    Voilà, /!\ pour les amoureux du copier-coller ;p !

  7. Zahoui

    Très utile…grand merci. Je conçois actuel une application de gestion d’hotel capable de determiner l’heure, le jour , le mois et l’annee exacte de fin de sejour du client automatiquement. Avec ce tuto, j’ai pû avoir des idées. Merci encore…Bonne continuation !

  8. Sobane

    ATTENTION : Ne fonctionne pas pour calculer une date après 2038 car basé sur un timestamp.

Post Comment