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
Source / Exemple :
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) .and. between(hfin,debnuit,minuitfin)
retour=nvertem(hfin-hdeb)
case between(hdeb,minuitdeb,finnuit) .and. between(hfin,minuitdeb,finnuit)
retour=nvertem(hfin-hdeb)
case between(hdeb,debnuit,minuitfin) .and. between(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) .and. between(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 .and. between(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")
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.