Calcul d'une traite (échéance)

0/5 (6 avis)

Snippet vu 30 258 fois - Téléchargée 19 fois

Contenu du snippet

Calcul de l'échéance de réglement d'une traite en fonction d'une date de départ, d'un délai de réglement et du jour de réglement (jour à 0 pour fin de mois).

Exemple :
Traite à 90 jours fin de mois à partir de aujourd'hui (05-09-2007) : TRAITE au 31/12/2007

Source / Exemple :


<?PHP
function CalculTraite($DateDepart, $DelaisReglement, $JourReglement){
// Calcule la date d'une traite (échéance)
// Ex : $TimeStamp = CalculTraite('01-08-2007', 90, 15);
//      $Date      = date("d/m/Y", $TimeStamp);

  // Date de départ
  $TableDate = explode('-', $DateDepart);
  $Jour      = $TableDate[0];
  $Mois      = $TableDate[1];
  $Annee     = $TableDate[2];

  // Nb de jour a avancer, qu'on calcule plutôt en mois si on peux
  if (($DelaisReglement % 30 == 0) and $DelaisReglement>=30){
    $NbMois          = $DelaisReglement / 30;
    $DelaisReglement = 0;
  }
  else
    $NbMois = 0;

  // On controle le Nb de jour maxi dans le mois
  $NbJourMois = date("t", mktime(0, 0, 0, $Mois+$NbMois, $Jour+$DelaisReglement, $Annee));
  if ($JourReglement>$NbJourMois or empty($JourReglement))
    $JourReglement = $NbJourMois;

  $d = 0;
  // On avance la date jusqu'au bon jour (exemple : le 15) en plus du délais (30J, 60J...)
  while (date("d", $TimeStamp) != $JourReglement){
  	$TimeStamp  = mktime(0, 0, 0, $Mois+$NbMois, $Jour+$DelaisReglement+$d, $Annee);

  	// On re-controle le Nb de jour maxi dans le mois
  	$NbJourMois = date("t", $TimeStamp);
    if ($JourReglement>$NbJourMois)
      $JourReglement = $NbJourMois;

  	$d++;
  	if ($d > 31) break; // Sécurité contre une boucle infinie
  }

  return $TimeStamp;
}

// Exemple :
$TimeStamp = CalculTraite('01-08-2007', 90, 15);
echo date("d/m/Y", $TimeStamp);
?>

Conclusion :


Ma 1ère source, j'attend vos avis ;)

A voir également

Ajouter un commentaire Commentaires
Bonjour,

Voici une alternative :


$delai_reglement = 30;
$date_facturation = '2017-02-27';
//$date_facturation = date('Y-m-d');

$jours_dans_le_mois = cal_days_in_month(CAL_GREGORIAN, date('n', strtotime($date_facturation)), date('y', strtotime($date_facturation)));
$nbr_jour_fin_du_mois = ($jours_dans_le_mois - date('d', strtotime($date_facturation)));
$date_dernier_jour_du_mois = date('Y-m-d', strtotime("$date_facturation + $nbr_jour_fin_du_mois days"));
$date_dernier_jour_du_mois__plus__delai_paiement = date('Y-m-d', strtotime("$date_dernier_jour_du_mois + $delai_reglement days"));

echo $date_dernier_jour_du_mois__plus__delai_paiement; // 2017-03-30
tyranausor Messages postés 3532 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 1 avril 2022 1
Modifié par tyranausor le 29/10/2016 à 23:00
Bonjour, tu as raison malalam de t'étonner qu'un mois ne fasse pas pile 30 jours. Pour simplifier les choses, dans le monde de la finance (et aussi en comptabilité) les 12 mois de l'année (et février aussi) font 30 jours soit 360 jours par an.

Je remercie l'auteur pour le code mais j'ai un peu de mal à le comprendre!

PS : pardon si je déterre un sujet
Disicom Messages postés 107 Date d'inscription vendredi 8 novembre 2002 Statut Membre Dernière intervention 28 mars 2011
28 mars 2011 à 09:26
Merci pour ce code !
hocinoptimiste Messages postés 4 Date d'inscription lundi 23 juillet 2007 Statut Membre Dernière intervention 20 mai 2008
30 sept. 2007 à 18:16
en ce momment je le trouve tres interessant
MagicManu Messages postés 19 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 23 janvier 2008
11 sept. 2007 à 23:41
Je n'ai jamais dis qu'un mois faisait 30 jours !
Simplement tu verras que dans le monde professionnel on parle toujours de traite à 30 jours, 60 jours, 120 jours... Or, on veux bien sûr parler de 1 mois, 2 mois, 4 mois... Et ma fonction le prend en compte !
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.