ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

calcul du nombre d'heures de nuits   



L'auteur

eric leissler
France France
Membre Simple
# 0000002784
enregistré le 06/03/2010
http://www.aumeric.fr
62 ans
leissler eric
85290 MORTAGNE SUR SEVRE
de la société AUMERIC LOGICIELS ( 0633412395 )
Fiche personnelle


Note des membres
pas de note

Contributions > 01 - PRG : Programmation > Temps - heures - Dates - Calendriers

calcul du nombre d'heures de nuits
# 0000000240
ajouté le 14/09/2005 12:55:06 et modifié le 29/03/2006
consulté 6698 fois
Niveau initié

Version(s) Foxpro :
VFP 9.0
VFP 8.0
VFP 7.0
VFP 6.0
VFP 5.0
VFP 3.0

Description

Bonjour à tous

Les fonctions temvern et nvertem sont les mêmes que dans l'une des contrib  que j'avais postée qui s'appelle dift

http://www.atoutfox.org/articles.asp?ACTION=FCONSULTER&ID=0000000066

Ici il s'agit de calculer le nombre d'heures de nuits, en partant d'une heure de début et une heure de fin

Heuredeb et heurfin sont en caractère  "HH:MM:SS"

ex  toto=heuresnut("10:00:00","23:00:00","22:00","07:00") retournera "01:00:00"

A Améliorer : 

   Des tests en entrée de fonction, afin de s'assurer que les paramètres sont bien en texte 

Bonne journée à tous

Eric

Code source :
function heuresnuit
parameters hdeb,hfin,debnuit,finnuit
**
**    toto= heuresnuit(heurdeb, heurfin,"22:00","07:00")
local retour,minuitdeb,minuitfin,hdeb,hfin;debnuit,finhuit,hfin31,retour
minuitdeb=temvern("00:00")
minuitfin=temvern("24:00")
hdeb=temvern(left(hdeb,5))
hfin=temvern(left(hfin,5))
debnuit=temvern(debnuit)
finnuit=temvern(finnuit)
hfin31= minuitfin+finnuit
retour=nvertem(0)
          do case
             case between(hdeb,debnuit,minuitfin) .andbetween(hfin,debnuit,minuitfin)
             retour=nvertem(hfin-hdeb)
             case between(hdeb,minuitdeb,finnuit) .andbetween(hfin,minuitdeb,finnuit)
             retour=nvertem(hfin-hdeb)
             case between(hdeb,debnuit,minuitfin) .andbetween(hfin,minuitdeb,finnuit)
             retour=nvertem((minuitfin-hdeb)+hfin-minuitdeb)
             case between(hfin,debnuit,minuitfin) .and. hdeb <debnuit
             retour=nvertem(hfin-debnuit)
             case between(hfin,minuitdeb,finnuit)  .and. hdeb <debnuit
             retour=nvertem(hfin-minuitdeb+ (minuitfin-debnuit))
             case hfin >  finnuit .and. hfin<debnuit    .and.  between(hdeb,minuitdeb,finnuit)
             retour=nvertem(finnuit-hdeb)
             case hfin > finnuit .and. hfin<debnuit .and.between(hdeb,debnuit,minuitfin)
             retour=nvertem((finnuit-minuitdeb)+(minuitfin-hdeb))
             case hdeb<debnuit .and. hfin>finnuit .and. hfin<hdeb
             retour=nvertem((finnuit-minuitdeb)+(minuitfin-debnuit))
             case between(hfin,minuitfin,hfin31) .andbetween(hdeb,debnuit,minuitfin)
               retour = nvertem(hfin-minuitfin  +(minuitfin-hdeb))
               case between(hfin,minuitfin,hfin31).and. hdeb< debnuit .and. hdeb > finnuit
               retour = nvertem(hfin-minuitfin  +(minuitfin-debnuit))
              case between(hfin,minuitfin,hfin31).and. hdeb< debnuit .and. hdeb <= finnuit
               retour = nvertem(hfin-minuitfin  -(hdeb-minuitdeb))


              *-
              case hfin > hfin31 .andbetween(hdeb,debnuit,minuitfin)
               retour = nvertem(finnuit-minuitfin  +(minuitfin-hdeb))
               case hfin > hfin31 .and. hdeb< debnuit
               retour = nvertem(minuitfin-debnuit +(minuitfin-debnuit))




           endcase
return righ(retour,5)+":00"




function temvern
parameters temp1
temp1=alltrim(temp1)
local s,m,h
s=substr(temp1,len(temp1)-1,2)
s=val(s)
m=substr(temp1,len(temp1)-4,2)
m=val(m)*60
h=substr(temp1,1,len(temp1)-6)
h=val(h)*3600
retour=h+m+s
return retour


function nvertem
parameters temp1
local s,m,h
h=int(temp1/3600)
resth=mod(temp1,3600)

m=int((resth)/60)
restm=mod(m,60)

s=int(mod(resth,60))


return padl(h,5,"0")+":"+padl(m,2,"0")+":"+padl(s,2,"0")



Commentaires
Aucun commentaire enregistré ...

Publicité

Les pubs en cours :

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2019.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3