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
» Gestion d'un système client-serveur.
Ecart en jours entre 2 dates Emptypar Klaus Ven 17 Mai 2024 - 14:02

» item_index(résolu)
Ecart en jours entre 2 dates Emptypar jjn4 Mar 14 Mai 2024 - 19:38

» Bataille terrestre
Ecart en jours entre 2 dates Emptypar jjn4 Lun 13 Mai 2024 - 15:01

» SineCube
Ecart en jours entre 2 dates Emptypar Marc Sam 11 Mai 2024 - 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Ecart en jours entre 2 dates Emptypar Marc Sam 11 Mai 2024 - 12:22

» Philharmusique
Ecart en jours entre 2 dates Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
Ecart en jours entre 2 dates Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
Ecart en jours entre 2 dates Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Ecart en jours entre 2 dates Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Ecart en jours entre 2 dates Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Ecart en jours entre 2 dates Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Ecart en jours entre 2 dates Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0(résolu)
Ecart en jours entre 2 dates Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Ecart en jours entre 2 dates Emptypar Klaus Lun 6 Mai 2024 - 11:41

» @Jack
Ecart en jours entre 2 dates Emptypar Jack Mar 30 Avr 2024 - 20:40

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le Deal du moment : -14%
Apple MacBook Air (2020) 13,3″ Puce Apple M1 ...
Voir le deal
799 €

 

 Ecart en jours entre 2 dates

Aller en bas 
AuteurMessage
Klaus

Klaus


Nombre de messages : 12301
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
» Manipulation de dates
» formatage des dates
» Dates d'essaie
» 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: