Se connecter / S'enregistrer

Résolu PHP - Comparaison de dates

Solutions (12)
Tags :
  • Php
  • format
  • Programmation
|
Bonjour à tous,

je viens vers vous car je souhaite comparer des dates et je ne vois pas trop comment coder ça. Alors je vous explique :
Je récupère dans une base de donnée la date de début d'un contrat au format aaaa-mm-jj (c'est du varchar) et la durée de ce contrat en mois, je souhaiterais obtenir la date de fin dans le même format, je ne sais pas trop comment faire "l'addition".
De plus, une fois cette date de fin de contrat obtenu, je voudrais pouvoir la "comparer" avec la date d'aujourd'hui et si cette date se situe par exemple dans moins de deux mois j'affiche un message à l'utilisateur.

Pouvez-vous m'aider à coder cela ?

Merci d'avance
Contenus similaires
Meilleure solution
partage
|
En effet, il y a 2 erreurs dans mon code:
- un "+" en trop ligne 8
- une inversion entre l'année et le mois ligne 11

  1. <?php
  2. $datedeb = '2010-12-18'; // Date de début, qui provient de la base
  3. $duree = 6; // Durée du contrat en mois
  4.  
  5. // Conversion de la date de début en unix timestamp
  6. list($y,$m,$d) = explode('-', $datedeb);
  7. $utdb = mktime(12,0,0,$m,$d,$y);
  8.  
  9. // Calcul de la fin du contrat:
  10. $utdf = strtotime("+".$duree." months", $utdb);
  11.  
  12. // On prend la date du jour à 12h, pour être dans le même contexte horaire que le contrat:
  13. $now = mktime(12, 0, 0, date('m'), date('d'), date('Y'));
  14.  
  15. // Comparaison des dates:
  16. if (strtotime("+2 months", $now) > $utdf) {
  17. echo "le contrat va bientot se terminer";
  18. } else {
  19. echo "le contrat ne se termine pas bientôt";
  20. }
  • Commenter cette solution |
Score
0
òh
òi
|
Merci beaucoup !!
  • Commenter cette réponse |
Score
0
òh
òi
|
Le mieux reste quand même:
  1. <?php
  2. echo date('Y-m-d', $utdf);
  3. ?>

:) 
dates() et strftime() sont les deux fonctions de formatage de date.
  • Commenter cette réponse |
Score
0
òh
òi
|
Je suis désolé mais j'ai encore une petite question : comment je pourrais faire pour afficher la date de fin de contrat dans un format aaaa-mm-jj (ou dans le même genre) puisque si j'ai bien compris si je fais :
$echo utdf
le résultat s'affiche en secondes

Est-ce qu'il y a un moyen d'afficher ce résultat dans un autre format, j'ai pensé à faire des divisions avec des modulo mais bon ... si vous avez une autre solution

Encore merci
  • Commenter cette réponse |
Score
0
òh
òi
|
Meilleure réponse sélectionnée par boss183.
  • Commenter cette réponse |
Score
0
òh
òi
|
MERCI CRAZYCAT !

Ce n'est pas la première fois que tu m'aides et je te remercie beaucoup !
  • Commenter cette réponse |
Score
0
òh
òi
|
  1. $datedeb = '2010-12-18'; // Date de début, qui provient de la base
  2. $duree = 6; // Durée du contrat en mois
  3. // Conversion de la date de début en unix timestamp
  4. list($y,$m,$d) = explode('-', $datedeb);
  5. $utdb = mktime(12,0,0,$m,$d,$y);
  6.  
  7. // Calcul de la fin du contrat:
  8. $utdf = strtotime("+".$duree.+" months", $utdb);
  9.  
  10. // On prend la date du jour à 12h, pour être dans le même contexte horaire que le contrat:
  11. $now = mktime(12, 0, 0, date('Y'), date('d'), date('m'));
  12.  
  13. // Comparaison des dates:
  14. if (strtotime("+2 months", $now) > $utdf)
  15. {
  16. echo "le contrat va bientot se terminer";
  17. }
  18. else
  19. {
  20. echo "le contrat ne se termine pas bientôt";
  21. }
  • Commenter cette réponse |
Score
0
òh
òi
|
Mais Crazycat n'affiche rien : il a juste mis des commentaires dans le test ...
A toi de compléter.
  • Commenter cette réponse |
Score
0
òh
òi
|
Bah mon code c'est celui que m'a donné crazycat
  • Commenter cette réponse |
Score
0
òh
òi
|
Ton code ?
  • Commenter cette réponse |
Score
0
òh
òi
|
Merci beaucoup crazycat !

Mais je n'arrive pas à faire marcher le truc, j'ai testé en mettant '2010-12-19' ce qui veut dire que le contrat se terminerait le 19 juin (dans moins de deux mois donc) mais ça ne marche pas j'ai essayé d'afficher qqchose mais ça n'affiche rien.
  • Commenter cette réponse |
Score
0
òh
òi
|
C'est assez simple, si on est rigoureux.
Il faut travailler en secondes:
  1. <?php
  2. $datedeb = '2011-05-19'; // Date de début, qui provient de la base
  3. $duree = 6; // Durée du contrat en mois
  4.  
  5. // Conversion de la date de début en unix timestamp
  6. list($y,$m,$d) = explode('-', $datedeb);
  7. $utdb = mktime(12,0,0,$m,$d,$y);
  8.  
  9. // Calcul de la fin du contrat:
  10. $utdf = strtotime("+".$duree.+" months", $utdb);
  11.  
  12. // On prend la date du jour à 12h, pour être dans le même contexte horaire que le contrat:
  13. $now = mktime(12, 0, 0, date('Y'), date('d'), date('m'));
  14. // Comparaison des dates:
  15. if (strtotime("+2 months", $now) > $utdf) {
  16. // Ici, "dans deux mois" est plus tard que la date de fin de contrat
  17. // on affiche donc le message
  18. }


Nota: J'ai fait les calculs en forçant l'heure à 12h pour passer outre les problèmes de changement d'heure.
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS