ActionScript 3.0, l'essentiel sous la main Adobe Flash Accueil
Fiches
Boutique
Contact
Calculer le nombre de jours entre 2 dates
Nous allons voir ici comment calculer le nombre de jour entre deux dates. Pour cela, on va créer une fonction recevant 4 paramètres :
Nous allons avoir également besoin de deux autres fonctions :
- une pour ajouter une zéro au numéro des mois inférieurs à 10 (Janvier à Septembre)
- une pour déterminer les années bisextiles (pour prendre en compte le 29 Février).

//Données sur le nombre de jour par mois
var mois_31 = "01,03,05,07,08,10,12";
var mois_30 = "04,06,09,11";
var mois_28 = "02";

//Fonction déterminant si une année est bisextile ou non
function bisextile(annee)
{
if( ((annee & 3) == 0) && ((annee % 100 != 0) || (annee % 400 == 0)) )
{
return true;
}
else
{
return false;
}
}

//Fonction ajoutant un zéro au nombre inférieur à 10, afin de rester sur la base d'un nombre à deux chiffres.
function add_zero_dizaine(num)
{
if(num.length == 1)
{
return "0"+num;
}
else
{
return num;
}
}

//Fonction calculant le nombre de jour entre deux dates incluses
function nb_j_between_two_date(date_1:String,date_2:String,inc_dep:Boolean,inc_end:Boolean)
{
var nb_jour:Number = 0;

//Détermine si on inclu ou non les jours de départ et d'arrivée
var dep = 0; if(inc_dep == true) { dep = 1; }
var end = 0; if(inc_end == true) { end = 1; }

//Décomposition de la date de départ
var jj_1 = date_1.substr(0,2);
var mm_1 = date_1.substr(3,2);
var aaaa_1 = date_1.substr(6,4);

//Décomposition de la date d'arrivée
var jj_2 = date_2.substr(0,2);
var mm_2 = date_2.substr(3,2);
var aaaa_2 = date_2.substr(6,4);

//Calcul le nombre de jours restant dans le mois de départ (+dep si on inclus le jour de départ)
var nb_jj_dep:Number;
if(mois_31.indexOf(mm_1) != -1) { nb_jj_dep = 31 - parseInt(jj_1) + dep; } //mois à 31 jours
if(mois_30.indexOf(mm_1) != -1) { nb_jj_dep = 30 - parseInt(jj_1) + dep; } //mois à 30 jours
if(mois_28.indexOf(mm_1) != -1) { nb_jj_dep = 28 - parseInt(jj_1) + dep; } //mois à 28 jours
if(mois_28.indexOf(mm_1) != -1 && bisextile(aaaa_1) == true) { nb_jj_dep = 29 - parseInt(jj_1) + dep; } //mois à 29 jours
nb_jour = nb_jour + nb_jj_dep;

//Calcul le nombre de jour dans les autres mois
var nb_mois:Number = parseInt(mm_2) - parseInt(mm_1) - 1 + (12 * (aaaa_2 - aaaa_1)); //Nombre de mois à calculer
var next_mois = parseInt(mm_1) + 1; //Premier mois à calculer
var nb_jj:Number = 0; //Nombre de jour dans le mois
var annee_plus:Number = 0; //Nombre d'année en plus par rapport à l'année de départ
for(var i=0; i<nb_mois; i++)
{
//Détermine le numéro du mois à traiter
var num_mois = add_zero_dizaine(String(next_mois+i));

//Détermine le numéro du année à traiter
var mois13 = parseInt(num_mois)%12; //Test si on passe à une nouvelle année (si num_mois = 13)
if(mois13 == 1) //Si oui...
{
annee_plus++; //...on déclare +1 année ajouté
}

//Re-calcul le numéro du mois suivant si une ou plusieurs années sont passées
if(annee_plus >= 1)
{
num_mois = add_zero_dizaine(String(next_mois+i - (12 * annee_plus))); //On retire 12 mois par année passée
}

if(mois_31.indexOf(num_mois) != -1) { nb_jj = nb_jj + 31; } //+ 31 jours
if(mois_30.indexOf(num_mois) != -1) { nb_jj = nb_jj + 30; } //+ 30 jours
if(mois_28.indexOf(num_mois) != -1) { nb_jj = nb_jj + 28; } //+ 28 jours
if(mois_28.indexOf(num_mois) != -1 && bisextile(parseInt(aaaa_1)+annee_plus) == true) { nb_jj = nb_jj + 29; } //mois à 29 jours
}
nb_jour = nb_jour + nb_jj;

//Calcul le nombre de jours dans le mois d'arrivée (+end si on inclus le jour d'arrivée)
var nb_jj_end:Number;
if(mois_31.indexOf(mm_2) != -1) { nb_jj_end = 31 - parseInt(jj_2) + end; } //mois à 31 jours
if(mois_30.indexOf(mm_2) != -1) { nb_jj_end = 30 - parseInt(jj_2) + end; } //mois à 30 jours
if(mois_28.indexOf(mm_2) != -1) { nb_jj_end = 28 - parseInt(jj_2) + end; } //mois à 28 jours
if(mois_28.indexOf(mm_2) != -1 && bisextile(aaaa_2) == true) { nb_jj_end = 29 - parseInt(jj_2) + 1; } //mois à 29 jours
nb_jour = nb_jour + nb_jj_end;

return nb_jour;
}

//Exemple : entre le 22 Avril 2011 inclu et le 18 Octobre 2011 exclu
nb_j_between_two_date("22-04-2011","18-10-2011",true,false); // = 175 jours
Commentaire(s)
Aucun.