FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Ecart en jours entre 2 dates Emptypar Pedro Sam 23 Nov 2024 - 15:50

» Un autre pense-bête...
Ecart en jours entre 2 dates Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Ecart en jours entre 2 dates Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Ecart en jours entre 2 dates Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Ecart en jours entre 2 dates Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Ecart en jours entre 2 dates Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Ecart en jours entre 2 dates Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Ecart en jours entre 2 dates Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Ecart en jours entre 2 dates Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Ecart en jours entre 2 dates Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Ecart en jours entre 2 dates Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Ecart en jours entre 2 dates Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Ecart en jours entre 2 dates Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Ecart en jours entre 2 dates Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Ecart en jours entre 2 dates Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier

 

 Ecart en jours entre 2 dates

Aller en bas 
AuteurMessage
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Ecart en jours entre 2 dates Empty
MessageSujet: Ecart en jours entre 2 dates   Ecart en jours entre 2 dates EmptyMar 2 Mar 2010 - 9:18

Motivé par la demande d'un membre du forum, j'ai réalisé un petit module Panoramic permettant de calculer l'écart entre deus dates, en nombre de jours, quelque soit la date, et en tenant compte des années bisextiles. Le module publié ci-après contient toute la documentation dans le source, et est exécutable tel quel dans l'éditeut puisqu'l contient un petit programme de démonstration. Attention: il faut rentrer des dates valides !

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
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
 
Ecart en jours entre 2 dates
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» ecart date
» formatage des dates
» Dates d'essaie
» Manipulation de dates
» Gérer les dates de péremption

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: