Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: ecart date Lun 1 Mar 2010 - 15:45 | |
| Je cherche désespéremmment un moyen de calculer le nombre de jours entre deux date entées dans des edit sous format JJ/MM/AAAA du moins le moyen de récupérer la valeur système de ces dates . | |
|
jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: +++ Lun 1 Mar 2010 - 17:59 | |
| J'ai un moyen simple qui marche si les deux dates sont suffisamment éloignées (approximation à environ 1 jour près) (c'est suffisant si on veut calculer l'âge de quelqu'un en années et en mois) je multiplie les années par 365.2422 (jours) et les mois par 30.43685 (jours) et j'additionne le tout avec les jours. | |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: ecart date Lun 1 Mar 2010 - 19:29 | |
| Bonjour, Ygeronimi, J'ai un petit module Panoramic qui fait exactement cela. Toute la documentation est dans le source, y compris un petit programme de test. Il suffit de prendre le source en le surlignant puis copier par control/C, puis le coller dans l'éditeur. Amuse-toi bien ! Voici le source: - Code:
-
rem ********************************************************** rem * * rem * déclaration nécessaires en début de programme * rem * * rem **********************************************************
label ecart_en_jours, eej_eclater, eej_eclater_fin dim eej_debut$, eej_fin$, eej_date$, eej_ecart% dim eej_d%(1,2) :rem "dates début et éclatées" dim eej_i%, eej_j%, eej_jours%(12) dim eej_nad%, eej_naf%, eej_nd%, eej_nf%
rem ********************************************************** rem * programme de test * rem * * rem **********************************************************
label calculer
width 0,250 height 0,200
alpha 1 caption 1,"Jour début:" top 1,10 left 1,10
edit 2 top 2,10 left 2,100
alpha 3 caption 3,"Jour début:" top 3,30 left 3,10
edit 4 top 4,30 left 4,100
button 5 caption 5,"Calculer l'écart" top 5,70 left 5,100 on_click 5,calculer
alpha 6 top 6,110 left 6,100 font_size 6,16 font_color 6,0,0,255 caption 6,"0"
end
rem ----------------- ceci montre comment appeler la routine !!!!!!!!!!!! calculer: eej_debut$ = text$(2) eej_fin$ = text$(4) gosub ecart_en_jours caption 6,str$(eej_ecart%) return
rem ************************************************************ rem * * rem * ecart en jours - routine à inclure dans le source * rem * * rem * en entrée, charger les variiables eej_debut$ et eej_fin$ * rem * en sortie, utiliser la variable eej_ecart% * rem * * rem * Si la date de fin est plus petite que la date de début, * rem * le programme retourne 0. * rem * * rem * ATTENTION: il faut spécifier des dates valides !!! * rem * * rem ************************************************************
ecart_en_jours: eej_ecart% = 0 :rem "suppoer aucun écart" eej_jours%(1) = 31 eej_jours%(2) = 28 eej_jours%(3) = 31 eej_jours%(4) = 30 eej_jours%(5) = 31 eej_jours%(6) = 30 eej_jours%(7) = 31 eej_jours%(8) = 31 eej_jours%(9) = 30 eej_jours%(10) = 31 eej_jours%(11) = 30 eej_jours%(12) = 31 eej_date$ = eej_debut$ eej_i% = 0 :rem "date de début" gosub eej_eclater :rem "indice (0,x) pour début" eej_date$ = eej_fin$ eej_i% = 1 :rem "date de fint" gosub eej_eclater :rem "indice (1,x) pour fin" if eej_d%(0,2)>eej_d%(1,2) then return :rem "année début>fin ? if eej_d%(0,2)=eej_d%(1,2) if eej_d%(0,1)>eej_d%(1,1) then return :rem "mois début>fin ? if eej_d%(0,1)=eej_d%(1,1) if eej_d%(0,0)=eej_d%(1,0) then return :rem "jour début>=fin ? end_if end_if rem ici, on a des dates différentes avec certitude ! eej_nad% = 365 if frac(eej_d%(0,2)/4)=0 then eej_nad% = 366 :rem "longueur année début" eej_naf% = 365 if frac(eej_d%(1,2)/4)=0 then eej_naf% = 366 :rem "longueur année fin" eej_nd% = eej_d%(0,0) :rem "numero de jour début" if eej_d%(0,1)>1 for eej_i%=1 to eej_d%(0,1)-1 :rem "ajouter les autres mois" eej_nd% = eej_nd% + eej_jours%(eej_i%) if eej_i%=2 :rem "février ?" if eej_nad%=366 then eej_nd% = eej_nd% + 1 :"rem année bisextile" end_if next eej_i% end_if eej_nf% = eej_d%(1,0) :rem "numero de jour fin" if eej_d%(1,1)>1 for eej_i%=1 to eej_d%(1,1)-1 :rem "ajouter les autres mois" eej_nf% = eej_nf% + eej_jours%(eej_i%) if eej_i%=2 :rem "février ?" if eej_naf%=366 then eej_nf% = eej_nf% + 1 :rem "rem année bisextile" end_if next eej_i% end_if eej_ecart% = eej_nf% - eej_nd% while eej_d%(0,2)<eej_d%(1,2) eej_nad% = 365 :rem "écart des années" if eej_d%(0,1)<3 :rem "janvier ou février ?" if frac(eej_d%(0,2)/4)=0 eej_nad% = 366 :rem "année bisextite" end_if end_if eej_d%(0,1) = 2 :rem "gérer bisextile pour les autres années eej_ecart% = eej_ecart% + eej_nad% :rem "ajouter année" eej_d%(0,2)= eej_d%(0,2) + 1 :rem "passer à l'année suivante" end_while return
rem ---------------------- routine de service à inclure aussi dans le source ! eej_eclater: eej_d%(eej_i%,0) = 0 eej_d%(eej_i%,1) = 0 eej_d%(eej_i%,2) = 0 rem on_error_goto eej_eclater_fin eej_j% = instr(eej_date$,"/") if eej_j%>0 eej_d%(eej_i%,0) = val(left$(eej_date$,eej_j%-1)) eej_date$ = right$(eej_date$,len(eej_date$)-eej_j%) eej_j% = instr(eej_date$,"/") if eej_j%>0 eej_d%(eej_i%,1) = val(left$(eej_date$,eej_j%-1)) eej_date$ = right$(eej_date$,len(eej_date$)-eej_j%) eej_d%(eej_i%,2) = val(eej_date$) end_if end_if eej_eclater_fin: return
| |
|
Invité Invité
| Sujet: Re: ecart date Lun 1 Mar 2010 - 19:36 | |
| Klaus, tu es sur ton ordi toute la journée. Il faut se reposer de temps en temps et courir. @+ courir et se reposer, je me rends compte que ce n'est pas compatible. |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: ecart date Lun 1 Mar 2010 - 20:35 | |
| Salut, cosmos70,
Oui, je suis souvent devant l'ordinateur. Surtout tant que le temps n'est pas très agréable. J'ai la grande chance de travailler à domicile, ce qui change tout ! De plus, programmer, c'est ma passion, mon premier métier, mes études aussi, alors,ça me rappelle de bons souvenirs.
Comme tu vois, j'ai fait cette fois un programme en Panoramic. Ca change des utilitaires externes que j'ai mis en ligne ces derniers jours. Eh oui, quand on peut faireen Panoramic, on fait en Panoramic !
Au fait, c'est le troisième programme Panoramic que je publie en rapport avec les dates. Jes deux autres sont "date_add" et "jour_de_semaine". Cela commence à ressembler à une jolie collection, non ?
Allez, blaque à part, si cela peut rendre service...
Bonne soirée Klaus | |
|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: ecart date Ven 5 Mar 2010 - 16:21 | |
| Merci klaus
j'enregistre la page du forum pour étudier delà de près enfin avec plus de temps (pas d'internet à la maison). je ne sais pas si tu collectionnes les progs de date mais moi je fais bien une fixation sur la gestion de compteur edf et d'eau....alors???.... | |
|