Calcul d'une traite (échéance)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 29 781 fois - Téléchargée 18 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
Messages postés
3529
Date d'inscription
jeudi 6 août 2009
Statut
Membre
Dernière intervention
24 juin 2021
1
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
Messages postés
107
Date d'inscription
vendredi 8 novembre 2002
Statut
Membre
Dernière intervention
28 mars 2011

Merci pour ce code !
Messages postés
4
Date d'inscription
lundi 23 juillet 2007
Statut
Membre
Dernière intervention
20 mai 2008

en ce momment je le trouve tres interessant
Messages postés
19
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
23 janvier 2008

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.