PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → durée entre deus heures et cumul des durées
durée entre deus heures et cumul des durées
Started by alain Pédréno, Feb., 06 2023 8:04 AM - 12 replies
Posted on February, 06 2023 - 8:04 AM
Bonjour,
je veux gérer des séances de RDV de durées variables.
j'utilise les fonctions heure, durée et minutes
exemple: debut est heure = "16:00" Fin est heure = "18:15"
la durée calculée est de "02:25" au lieu de "02:15" comment convertir?
d'autre part, je veux cumuler les differentes durées établies
Registered member
3,844 messages
Popularité : +227 (347 votes)
Posted on February, 06 2023 - 9:01 AM
Bonjour,
Quel est ton code pour calculer la durée ? Ton 02:25 ressemble fortement à 2,25h soit 2h15
Pour cumuler les différentes durées, il suffit de les additionner.

--
Il y a peut être plus simple, mais, ça tourne
Message modified, February, 06 2023 - 9:05 AM
Registered member
2,566 messages
Popularité : +222 (260 votes)
Posted on February, 07 2023 - 9:32 AM
Bonjour,

Voici un exemple de calcul sur les durées
hDebut est une Heure = "1600"
hFin est une Heure = "1815"
duDureeTotale est une Durée

duDureeTotale = hFin - hDebut
Trace(hFin - hDebut)

hDebut = "1100"
hFin = "1125"
duDureeTotale += hFin - hDebut
Trace(hFin - hDebut)

hDebut = "1000"
hFin = "1536"
duDureeTotale += hFin - hDebut
Trace(hFin - hDebut)
Trace("Durée totale = " + duDureeTotale)
Trace("Durée totale (formatée) = " + DuréeVersChaîne(duDureeTotale,"+J j HH h MM m SS s"))
Trace("Durée totale (h) = " + duDureeTotale..EnHeures)
Trace("Durée totale (min) = " + duDureeTotale..EnMinutes)
Trace("Durée totale (jours) = " + duDureeTotale..EnJours)


Résultat:
0021500000
0002500000
0053600000
Durée totale = 0081600000
Durée totale (formatée) = 0 j 08 h 16 m 00 s
Durée totale (h) = 8.26666666666666666666666666666666666
Durée totale (min) = 496
Durée totale (jours) = 0.3444444444444444444444444444444444444


--
Cordialement,

Philippe SAINT-BERTIN
Registered member
1,143 messages
Popularité : +50 (142 votes)
Posted on February, 07 2023 - 11:12 AM
Bonjour,

La conversion de réel en durée peut se faire avec une procédure comme celle-ci, par exemple :
Procedure RéelVersDurée(LOCAL rDuréeEnRéel est réel):Durée
duRésultatDurée est une Durée
duRésultatDurée..Heure = PartieEntière(rDuréeEnRéel)
duRésultatDurée..Minute = PartieDécimale(rDuréeEnRéel)*60

RENVOYER duRésultatDurée


--
Thierry TILLIER
Développeur WINDEV -WEBDEV
Formation WINDEV : https://coursdinfo-video.teachizy.fr/
Livre WINDEV : https://amzn.eu/d/6xTow1z
Tuto WINDEV sur ma chaîne Youtube
Registered member
2,566 messages
Popularité : +222 (260 votes)
Posted on February, 08 2023 - 11:57 AM
@THIERRY TILLIER

Il y a beaucoup plus simple: RéelVersDateHeure

--
Cordialement,

Philippe SAINT-BERTIN
Registered member
1,143 messages
Popularité : +50 (142 votes)
Posted on February, 08 2023 - 7:05 PM
@Philippe
RéelVersDateHeure <> RéelVersDurée

--
Thierry TILLIER
Développeur WINDEV -WEBDEV
Formation WINDEV : https://coursdinfo-video.teachizy.fr/
Livre WINDEV : https://amzn.eu/d/6xTow1z
Tuto WINDEV sur ma chaîne Youtube
Registered member
2,566 messages
Popularité : +222 (260 votes)
Posted on February, 09 2023 - 11:08 AM

@Philippe
RéelVersDateHeure <> RéelVersDurée


Au temps pour moi, j'ai mal lu et pas fais attention que tu calculais une durée.

--
Cordialement,

Philippe SAINT-BERTIN
Registered member
179 messages
Popularité : +17 (17 votes)
Posted on February, 09 2023 - 4:52 PM
THIERRY TILLIER a écrit :
Bonjour,

La conversion de réel en durée peut se faire avec une procédure comme celle-ci, par exemple :
Procedure RéelVersDurée(LOCAL rDuréeEnRéel est réel):Durée
duRésultatDurée est une Durée
duRésultatDurée..Heure = PartieEntière(rDuréeEnRéel)
duRésultatDurée..Minute = PartieDécimale(rDuréeEnRéel)*60

RENVOYER duRésultatDurée


--
Thierry TILLIER
Développeur WINDEV -WEBDEV
Formation WINDEV : https://coursdinfo-video.teachizy.fr/
Livre WINDEV : https://amzn.eu/d/6xTow1z
Tuto WINDEV sur ma chaîne Youtube


Bonjour Thierry,

avec cette approche il faut être absolument certain que l'on aura jamais de durée négative car sinon cette fonction ne fonctionne pas.

Le problème est dans la fonction PartieEntière car la partie entière de -2.4 est égale à -3. C'est contre intuitif et ça peut provoquer des surprises.

Voici la fonction qui permet de traiter aussi correctement les durées négatives :
Procedure RéelVersDurée(LOCAL rDuréeEnRéel est réel):Durée
duRésultatDurée est une Durée
duRésultatDurée..Heure = PartieEntière(Abs(rDuréeEnRéel))
duRésultatDurée..Minute = PartieDécimale(Abs(rDuréeEnRéel))*60
//Si la durée est négative, on change le signe avant le retour
SI rDuréeEnRéel < 0 ALORS
duRésultatDurée *= -1
FIN
RENVOYER duRésultatDurée
Registered member
108 messages
Popularité : +1 (1 vote)
Posted on February, 09 2023 - 5:04 PM
Bonjour,

Je découvre dans "Procedure RéelVersDurée(LOCAL rDuréeEnRéel est réel):Durée" , le typage de la variable de retour par le ":Durée".
Quel est l'intérêt de typer si la variable de retour est déjà typée ?

Résultat est une Durée
Résultat = RéelVersDurée(MaDuréeEnRéel)
Registered member
3,844 messages
Popularité : +227 (347 votes)
Posted on February, 09 2023 - 5:37 PM
Bonjour,
1-Tu peux très bien avoir
...
RENVOYER RéelVersDurée(MaDuréeEnRéel)

2-Lors de l'appel de la fonction, cela évite aussi un appel incorrect
rMonRéel est réel

rMonRéel=MaFonction()

avec
FONCTION MaFonction(): chaîne

RENVOYER "Bonjour"


--
Il y a peut être plus simple, mais, ça tourne
Message modified, February, 09 2023 - 5:43 PM
Registered member
179 messages
Popularité : +17 (17 votes)
Posted on February, 10 2023 - 10:50 AM
NadSoftware a écrit :
Bonjour,

Je découvre dans "Procedure RéelVersDurée(LOCAL rDuréeEnRéel est réel):Durée" , le typage de la variable de retour par le ":Durée".
Quel est l'intérêt de typer si la variable de retour est déjà typée ?

Résultat est une Durée
Résultat = RéelVersDurée(MaDuréeEnRéel)


En plus de ce qu'a répondu Voroltinquo ça peut être utile lorsque l'on retourne la mauvaise variable en fin de procédure (ça m'arrive parfois).

Si on a un retour un peu complexe, style :
Procedure MaProc() : tableau associatif de tableau de RendezVous
taRetour est un tableau de tableau de RendezVous
// ... Traitement
RENVOYER taRetour


On aura une erreur de compilation et on peut faire la correction directe (ce qui économise parfois de longue minutes/heures de débogage).

Un autre avantage est dans les procédure des webservice : typer le retour permet de prendre en compte la modification dans le WSDL et donc lors de mise à jour on a une vraie mise à jour, pas un interprétation de ce qui a été initialement retourné.

En résumé : on peut faire sans mais on s'évite des problèmes supplémentaires en le spécifiant systématiquement.
Registered member
108 messages
Popularité : +1 (1 vote)
Posted on February, 10 2023 - 11:00 AM
Bonjour,
Merci des explications Voroltinquo et Jérôme
Registered member
1,143 messages
Popularité : +50 (142 votes)
Posted on February, 10 2023 - 1:02 PM
NadSoftware a écrit :
Bonjour,

Je découvre dans "Procedure RéelVersDurée(LOCAL rDuréeEnRéel est réel):Durée" , le typage de la variable de retour par le ":Durée".
Quel est l'intérêt de typer si la variable de retour est déjà typée ?

Résultat est une Durée
Résultat = RéelVersDurée(MaDuréeEnRéel)


Ce n'est pas une obligation mais j'ai commencé en C et C++ ou tout doit être typé. J'ai gardé cette habitude.
Et comme le dit Jérôme, ça rend le code plus "solide".

@Jérôme
Oui tout à fait pour la durée négative. Merci pour la précision.

--
Thierry TILLIER
Développeur WINDEV -WEBDEV
Formation WINDEV : https://coursdinfo-video.teachizy.fr/
Livre WINDEV : https://amzn.eu/d/6xTow1z
Tuto WINDEV sur ma chaîne Youtube