Calcul d'une traite (échéance)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 29 049 fois - Téléchargée 17 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
Disicom
Messages postés
107
Date d'inscription
vendredi 8 novembre 2002
Statut
Membre
Dernière intervention
28 mars 2011

Merci pour ce code !
hocinoptimiste
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
MagicManu
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 !
malalam
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
19
Hello,

ça aurait plus sa place sur codyx.org, ça.
Mais : un mois ne fait pas forcément 30 jours. Ca se saurait.

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.