Calcul différence de deux dates au format FR

Calcul différence de deux dates au format FR - PHP - Programmation

Marsh Posté le 08-05-2013 à 16:56:09    

Salut,  
 
J'ai besoin de calculer la différences entre deux dates pour un calcul de prorata, le soucis est que la fonction que j'utilise demande une date au format MM/JJ/AAAA, j'aurais besoin dans mon formulaire de rentrer des dates au format FR JJ/MM/AAAA.
 
Voici le code utilisé :
 

Code :
  1. <body>
  2.  <form action="" method="post">
  3.   <p>
  4.   <table>
  5.    <tr><td><label for="date1">Date du jour (MM/JJ/AAAA)</label> : </td><td><input type="text" name="date1"/></td></tr>
  6.    <tr><td><label for="date2">Date d'expiration du service (MM/JJ/AAAA)</label> : </td><td><input type="text" name="date2"/></td></tr>
  7.    <tr><td><label for="prix1">Prix de l'ancienne offre (en HT/mois)</label> : </td><td><input type="text" name="prix1"/></td></tr>
  8.    <tr><td><label for="prix2">Prix de la nouvelle offre (en HT/mois)</label> : </td><td><input type="text" name="prix2"/></td></tr>
  9.    <tr><td><input type="submit" value="Valider" /></td></tr>
  10.   </table>
  11.   </p>
  12.  </form>
  13. </body>
  14. </html>
  15. <?php
  16. function diff_date($date1, $date2)
  17. {
  18.     $s = strtotime($date2)-strtotime($date1);
  19.     $d = intval($s/86400);
  20.     return "$d";
  21. }
  22. if (isset($_POST['date1']) AND isset($_POST['date2']))
  23. {
  24.     $d = diff_date($_POST['date1'], $_POST['date2']);
  25.     $argentRestant = (($d * $_POST['prix1']) / 31);
  26.     $prorata = (($argentRestant * 31) / $_POST['prix2']);
  27.     echo 'Nombres de jours restants est de ' . $d;
  28.     echo '<br/>L\'argent restant sur l\'ancienne offre est de ' . $argentRestant;
  29.     echo '<br/>Le nombre de jours &agrave; ajouter &agrave; la nouvelle offre est de ' . $prorata;
  30. }
  31. else
  32. {
  33.     echo '';
  34. }
  35. ?>


 
Auriez vous une idée ?  
 
Merci :)

Reply

Marsh Posté le 08-05-2013 à 16:56:09   

Reply

Marsh Posté le 08-05-2013 à 18:46:32    

Déjà tu te trompes, ta fonction attends une date au format AAAA-MM-JJ Puisqu'elle fait un strtotime() sur les dates passées en paramètres.
 
Tout ce que t'as à faire, c'est une fonction convertissant une date du format FR au format anglais ;)
 
Au choix, avec les expressions régulières ou avec explode() et implode()
Ex :  

Code :
  1. function dateFrToEn($date)
  2. {
  3.    return implode('-', array_reverse(explode('/', $Date)));
  4. }


Complètes la fonction pour qu'elle vérifie que la date en entrée est bien en anglais, mais c'est l'idée : changer de séparateur et l'ordre des champs dans la date.


Message édité par rufo le 08-05-2013 à 18:47:03

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 10-05-2013 à 17:50:50    

Merci bien, je vais tester ça dès que j'ai du temps :)
 
Merci !

Reply

Marsh Posté le 17-05-2013 à 17:07:36    

$d1 = new \DateTime("now",new \DateTimeZone('Europe/Paris'));  
$d2 = new \DateTime($jour->getDate()->format('Y-m-d H:i:s'),new \DateTimeZone('Europe/Paris'));    
$interval = $d1->diff($d2);
$nb_heure = (((int)$interval->format('%r%d'))*60) + (int)$interval->format('%r%h');
 
Pour mes besoins j'ai fait un truc comme cela
Si ça peut t'aider


---------------
www.pronovolley.fr Faites vos prono sur la ligue de Volley et défiez vos amis. Des cadeaux en fin d'année  www.levoll.fr
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed