Calculer le nombre d'heures de nuits d'un créneau horaire

Contenu du snippet

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")

A voir également

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.