L'auteur
eric leissler France Membre Simple # 0000002784 enregistré le 06/03/2010http://www.aumeric.fr 68 ans LEISSLER Eric 85290 MORTAGNE SUR SEVRE de la société AUMERIC LOGICIELS 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é 10699 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) .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" )
Commentaires
Aucun commentaire enregistré ...