Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Manipulation de dates Jeu 11 Fév 2010 - 11:04 | |
| Je me suis fait un petit utilitaire pour manipuler des dates en format jj/mm/aaaa, selon le modèle de la fonction dateadd de Visual Basic. Je mets le source à disposition; toute la documentation est dans le source. La routine gère correctement les années bisextiles. C'est un exemple de ce j'aimerais utiliser avec les INCLUDE lorsqu'il seront opérationnels. En occurence, il s'agit ici de deux parties distinctes: la déclaration des variables utilisées par le module, à inclure au début du programme avec les déclarations habituelles, et la partie code à ajouter à la fin du source du programme dans lequel on souhaite utiliser cette fonction. A suivre: une fonction pour déterminer le jourde la semaine de n'importe quelle date. - Code:
-
rem **************************************************************** rem * * rem * dateadd - simulation de la fonction dateadd de VB * rem * * rem * Cette routine a 3 points d'entrée: * rem * dateadd_jj additionner des jours à une date * rem * dateadd_mm additionner des mois à une date * rem * dateadd_aaaa additionner des années à une date * rem * * rem * En entrée, 2 variables sont à charger: * rem * dateadd_date$ la date à modifier (en "jj/mm/aaa") * rem * dateadd_delta% la fraction à ajouter ou à retirer * rem * data_add_delta%<0: retirer * rem * data_add_delta%>0: ajouter * rem * * rem * En sortie, 1 variable est à consulter: * rem * dateadd_date$ la date résultante * rem * * rem * Installation: * rem * copier simplement ce module dans le source, en * rem * plaçant les déclarations au début et la * rem * partie code à la fin du source * rem * * rem ****************************************************************
label dateadd_jj, dateadd_mm, dateadd_aaaa label dateadd_eclate, dateadd_fusionne, dateadd_fin_de_mois label dateadd_fevrier dim dateadd_date$, dateadd_delta% dim dateadd_jj%, dateadd_mm%, dateadd_aaaa%, dateadd_jours%(12)
rem **************************************************************** rem * * rem * partie à coller à la fin du source * rem * * rem ****************************************************************
dateadd_eclate: dateadd_jj% = val(left$(dateadd_date$,2)) dateadd_mm% = val(mid$(dateadd_date$,4,2)) dateadd_aaaa% = val(right$(dateadd_date$,4)) return dateadd_fusionne: dateadd_date$ = str$(dateadd_mm%) + "/" + str$(dateadd_aaaa%) if dateadd_mm%<10 then dateadd_date$ = "0" + dateadd_date$ dateadd_date$ = str$(dateadd_jj%) + "/" + dateadd_date$ if dateadd_jj%<10 then dateadd_date$ = "0" + dateadd_date$ return
dateadd_fin_de_mois: dateadd_jours%(1)=31 dateadd_jours%(2)=28 dateadd_jours%(3)=31 dateadd_jours%(4)=30 dateadd_jours%(5)=31 dateadd_jours%(6)=30 dateadd_jours%(7)=31 dateadd_jours%(8)=31 dateadd_jours%(9)=30 dateadd_jours%(10)=31 dateadd_jours%(11)=30 dateadd_jours%(12)=31 return
dateadd_fevrier: if dateadd_mm%=2 if dateadd_aaaa%=int(dateadd_aaaa%/4)*4 then dateadd_jours%(2) = 29 end_if return dateadd_aaaa: gosub dateadd_eclate dateadd_aaaa% = dateadd_aaaa% + dateadd_delta% gosub dateadd_fusionne return dateadd_mm: gosub dateadd_eclate gosub dateadd_fin_de_mois dateadd_mm% = dateadd_mm% + dateadd_delta% if dateadd_mm%<1 while dateadd_mm%<1 dateadd_aaaa% = dateadd_aaaa% - 1 dateadd_mm% = dateadd_mm% + 12 end_while else while dateadd_mm%>12 dateadd_aaaa% = dateadd_aaaa% + 1 dateadd_mm% = dateadd_mm% - 12 end_while end_if if dateadd_jj%>dateadd_jours%(dateadd_mm%) then dateadd_jj% = dateadd_jours%(dateadd_mm%) gosub dateadd_fusionne return dateadd_jj: gosub dateadd_eclate gosub dateadd_fin_de_mois dateadd_jj% = dateadd_jj% + dateadd_delta% if dateadd_jj%<1 while dateadd_jj%<1 dateadd_mm% = dateadd_mm% - 1 if dateadd_mm%<1 dateadd_mm% = 12 dateadd_aaaa% = dateadd_aaaa% - 1 end_if gosub dateadd_fevrier dateadd_jj% = dateadd_jj% + dateadd_jours%(dateadd_mm%) end_while else while dateadd_jj%>dateadd_jours%(dateadd_mm%) gosub dateadd_fevrier dateadd_jj% = dateadd_jj% - dateadd_jours%(dateadd_mm%) dateadd_mm% = dateadd_mm% + 1 if dateadd_mm%>12 dateadd_mm% = 1 dateadd_aaaa% = dateadd_aaaa% + 1 end_if end_while end_if gosub dateadd_fusionne return | |
|
Tengaal
Nombre de messages : 13 Age : 50 Localisation : France Date d'inscription : 12/01/2010
| Sujet: Re: Manipulation de dates Jeu 11 Fév 2010 - 15:57 | |
| | |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Manipulation de dates Jeu 11 Fév 2010 - 17:43 | |
| Voici ma version d'un programme déterminant le jour de la semaine à partir d'une date en format jj/mm/aaa, telle que je l'avais annoncée dans mon premier poste pour la manipulation des dates. J'ai choisi un autre mécanisme que Tengaal, mais je pense arriver au même résultat: 0=dimanche, 1=lundi, ..., 6=samedi. Pour les inconditionnels des numéros des jours de 1=lundi, ..., 7=dimanche, la transformation est évidente... Tout comme mon programme de manipulation des dates, le présent module est conçu pour être intégré sans conflit dans un programme existant (d'où le choix des noms des variables internes et des labels). - Code:
-
rem ********************************************************************** rem * * rem * Calcul du jour de ls semaine * rem * * rem * Cette routnie calcule le jour de la semaine à partir d'une * rem * date en format jj/mm/aaaa. * rem * * rem * Appel: * rem * gosub jour_de_semaine * rem * * rem * Paramètre en entrée: * rem * jour_de_semaine_date$ * rem * * rem * Paramètres en sortie: * rem * jour_de_semaine_numero% * rem * jour_de_semaine_text$ * rem * * rem * Installation: * rem * Copier les déclarations au début du programme, et le code * rem * à la fin du programme dans lequel on veut l'utiliser * rem * * rem * Utilisation: * rem * jour_de_semaine_date$ = "16/05/2010" * rem * gosub jour_de_semaine * rem * message str$(jour_de_semaine_numero%) + " = " + jour_de_semaine_text$ rem * * rem **********************************************************************
label jour_de_semaine dim jour_de_semaine_date$, jour_de_semaine_numero%, jour_de_semaine_text$ dim jour_de_semaine_j%, jour_de_semaine_m%, jour_de_semaine_a% dim jour_de_semaine_m1%, jour_de_semaine_a1%, jour_de_semaine_ns% dim jour_de_semaine_as%, jour_de_semaine_f%
rem ********************************************************************** rem * * rem $ Début de la partie "code" à copier à la fin du source * rem * * rem **********************************************************************
jour_de_semaine: jour_de_semaine_j% = val(left$(jour_de_semaine_date$,2)) jour_de_semaine_m% = val(mid$(jour_de_semaine_date$,4,2)) jour_de_semaine_a% = val(right$(jour_de_semaine_date$,4)) if jour_de_semaine_m%<3 jour_de_semaine_m1% = jour_de_semaine_m% + 10 jour_de_semaine_a1% = jour_de_semaine_a% - 1 else jour_de_semaine_m1% = jour_de_semaine_m% - 2 jour_de_semaine_a1% = jour_de_semaine_a% end_if jour_de_semaine_ns% = int(jour_de_semaine_a1%/100) jour_de_semaine_as% = jour_de_semaine_a1% - jour_de_semaine_ns%*100 jour_de_semaine_f% = jour_de_semaine_j% + jour_de_semaine_as% + int(jour_de_semaine_as%/4) - 2* jour_de_semaine_ns% + int(jour_de_semaine_ns%/4) + int((26*jour_de_semaine_m1%-2)/10) jour_de_semaine_numero% = jour_de_semaine_f% - int(jour_de_semaine_f%/7)*7 select jour_de_semaine_numero% case 0: jour_de_semaine_text$ = "Dimanche" case 1: jour_de_semaine_text$ = "Lundi" case 2: jour_de_semaine_text$ = "Mardi" case 3: jour_de_semaine_text$ = "Mercredi" case 4: jour_de_semaine_text$ = "Jeudi" case 5: jour_de_semaine_text$ = "Vendredi" case 6: jour_de_semaine_text$ = "Samedi" end_select return
| |
|
Contenu sponsorisé
| Sujet: Re: Manipulation de dates | |
| |
|