PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Tache Agenda 22h-Minuit pas 00h
Tache Agenda 22h-Minuit pas 00h
Débuté par Laurent AUCOUTURIER, 16 mai 2025 13:22 - 3 réponses
Membre enregistré
40 messages
Posté le 16 mai 2025 - 13:22
Bonjour
Je suis bloqué pour réussir à créer une tache de 22h à minuit (24h).
Dans ma boite de dialogue le client doit pourvoir inscrire
Sai_HeureDebut : 22:00
Sai_HeureFin : 24h00

Car s'il met 00h00, le calcul de la durée est négative considérant le jour de la veille.
N'existe t il pas une solution simple pour que 22h00 / 24h00 donne une durée de 2h alors que 22h/0h00 donne -22h
Sachant que je ne parviens pas à inscrire 24h dans un champ de saisie horaire.

Bien sur je ne souhaite pas utiliser le 23h59 que j'utilise actuellement.

Il existe surement une solution mais ..... !!!! je ne trouve pas.
Merci à tous.

Laurent






;
Membre enregistré
290 messages
Posté le 16 mai 2025 - 14:22
Bonjour,
Tu peux éventuellement définir Sai_HeureFin comme un champ de saisie texte et lui définir les propriétés suivantes :
Sai_HeureFin..MasqueSaisie="99:99"
Sai_HeureFin..Taille=5
Sai_HeureFin..Indication="HH:MM"

L'utilisateur pourra saisir 24:00, mais attention, il faudra faire un contrôle pour s'assurer que les heures/minutes soient valides

Autre solution, ajouter J+1 à une variable de type DateHeure si l'utilisateur a saisi 00:00
Ex :
dDuree est une Durée
dDebut,dFin sont des DateHeures
nDate est un entier=DateVersEntier(DateSys())
dDebut=EntierVersDate(nDate)+Sai_HeureDebut
SI Val(Sai_HeureFin)=0 ALORS
dFin=EntierVersDate(nDate+1)+Sai_HeureFin
SINON
dFin=EntierVersDate(nDate)+Sai_HeureFin
FIN
dDuree=dFin-dDebut
Trace(dDuree..EnHeures)

La durée entre fin et début donnera un résultat plus cohérent si l'utilisateur a saisi 00:00

Cdt
Membre enregistré
497 messages
Posté le 16 mai 2025 - 17:42
Bonjour,

En partant du postulat qu'une heure de fin est toujours postérieure à une heure de début, vous pouvez aussi rajouter 24h à votre durée calculée dès lors qu'elle est négative.

Procedure CalculeDurée(hDébut est une heure, hFin est une heure) : Numérique
duRésultat est une durée = hFin - hDébut
SI duRésultat < 0 ALORS
duRésultat..Heure += 24
FIN
RENVOYER duRésultat..EnHeures
FIN

Trace(CalculeDurée("2200", "2300"))
// 22h à 23h => 1h

Trace(CalculeDurée("2200", "0000"))
// 22h à minuit => 2h

Trace(CalculeDurée("2200", "0300"))
// 22h à 3h => 5h
Membre enregistré
116 messages
Posté le 17 mai 2025 - 14:07
Merci beaucoup pour ces propositions ou Idées, je vais tester la meilleure pour moi.