Voici les fonctions. Elles sont efficaces, tout est calculé sans aucune boucle. Il reste à ajouter les vérifications des plages et de la validité des dates.
Code :
- //Calcul nombre de jour ecoulés depuis le 01/01/1970
- //year : de 1970 à 2100 (limite au 28/02/2100)
- //month : de 1 à 12
- //day : de 1 à 31
- int Date2Days(int day, int month, int year)
- {
- int y, m, m1;
- y = year;
- m = m1 = month +1;
- if(m < 4)
- {
- m += 12;
- y--;
- m1--;
- }
- return( ((year-1970) * 364) + (m1*28) + ((m*26) /10) + y + (y/4) - 2526 + day );
- }
- //Calcul jour de la semaine à partir du nombre de jour depuis 1970
- //return : 0:Lundi /1:Mardi ... /6:Dimanche
- int DayOfWeek(int nbj)
- {
- return((nbj +3) %7);
- }
|
Pour la petite histoire :
- En interne Date2Days() repasse les mois de Janvier et Février en fin d'année (if(m < 4) m+=12...) tels qu'il étaient dans le calendrier romain. Ceci explique au passage les noms des mois de SEPTembre, OCTobre, NOVembre et DECembre (7,8,9 et 10).
- Date2Days() n'est valable que jusqu'en 2100 car les années divisibles par 100 ne sont pas bissextiles, sauf celles divisibles par 400 (comme l'an 2000).