[Résolu] Calcul avec des heures et des minutes

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

[Résolu] Calcul avec des heures et des minutes

Message par Micoute »

Bonjour à tous,

je souhaiterais faire un petit utilitaire qui m'indiquerait dans combien de temps sera mon rendez-vous, au format "hh:ii", car j'ai un problème avec les minutes, selon qu'on va vers la minute ou qu'on l'a dépassée, par exemple dans mon exemple, s'il est 14:29, il m'indique 01:01, mais s'il est 14:35, il m'indique 01:05, j'ai pensé à addDate(), mais je n'arrête pas de modifier la formule, pourriez-vous m'aider, s'il vous plaît ?

Code : Tout sélectionner

Hrdv = 15
Mnrdv = 30
Debug Str(Hour(Date()) - Hrdv) + ":" + Str(Minute(Date()) - Mnrdv)

Merci de votre aide
Dernière modification par Micoute le dim. 15/juin/2014 12:42, modifié 1 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Calcul avec des heures et des minutes

Message par Backup »

pas si simple ;)

Code : Tout sélectionner


;***********************************************
;Titre  :*calcul_temps_restant
;Auteur  : Dobro
;Date  :15/06/2014
;Heure  :11:04:45
;Version Purebasic :  PureBasic 5.22 LTS (Windows - x86)
;Version de l'editeur :EPB V2.54
; Libairies necessaire : Aucune 
;***********************************************


;{- Enumerations / DataSections
;{ Windows
Enumeration
	#Win
EndEnumeration
;}
;{ Gadgets
Enumeration
	#Text_Titre
	#Text_heure_actuel
	#Text_Heure_Now
	#Text_rendez_vous
	#String_Rendez_vous
	#Text_Attente
	#Text_Resultat
EndEnumeration
;}
;{ Fonts
Enumeration
	#Font_Text_Titre
	#Font_Text_Heure_Now
	#Font_Text_Resultat
EndEnumeration
;}
Define.l Event

Declare  OpenWindow_Win()
Declare.s Calcul(a$,b$)





;}

If OpenWindow(#Win, 450, 200, 363, 199, "Rendez vous", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
	TextGadget(#Text_Titre, 100, 10, 135, 45, "Rendez vous")
	TextGadget(#Text_heure_actuel, 20, 75, 45, 25, "il est :")
	TextGadget(#Text_Heure_Now, 60, 75, 105, 25, "")
	TextGadget(#Text_rendez_vous, 15, 115, 90, 25, "Rendez vous")
	StringGadget(#String_Rendez_vous, 115, 115, 45, 25, "12:00")
	TextGadget(#Text_Attente, 10, 150, 55, 25, "Attente")
	TextGadget(#Text_Resultat, 80, 145, 250, 30, "")
	; Gadget Fonts
	SetGadgetFont(#Text_Titre, LoadFont(#Font_Text_Titre, "Microsoft Sans Serif", 12, #PB_Font_Bold|#PB_Font_HighQuality))
	SetGadgetFont(#Text_Heure_Now, LoadFont(#Font_Text_Heure_Now, "Microsoft Sans Serif", 10, #PB_Font_Bold|#PB_Font_HighQuality))
	SetGadgetFont(#Text_Resultat, LoadFont(#Font_Text_Resultat, "Microsoft Sans Serif", 12, #PB_Font_Bold|#PB_Font_HighQuality))
EndIf



;{- Event loop
Repeat
	Time$ = FormatDate("%hh:%ii:%ss", Date())
	SetGadgetText(#Text_Heure_Now,Time$)
	rendez_vous$=GetGadgetText(#String_Rendez_vous)
	result$=Calcul(rendez_vous$,Time$)
	SetGadgetText(#Text_Resultat,result$)
	Event = WaitWindowEvent(12)
	Select Event
		; ///////////////////
		Case #PB_Event_Gadget
		Select EventGadget()
			Case #Text_Titre
			Case #Text_heure_actuel
			Case #Text_Heure_Now
			Case #Text_rendez_vous
			Case #String_Rendez_vous
			Case #Text_Attente
			Case #Text_Resultat
		EndSelect
		; ////////////////////////
		Case #PB_Event_CloseWindow
		Select EventWindow()
			Case #Win
			CloseWindow(#Win)
			Break
		EndSelect
	EndSelect
Forever


Procedure.s Calcul(a$,b$)
	; by Dobro
	R_heure=val(stringfield(a$,1,":"))
	R_Minut =val(stringfield(a$,2,":"))
	AC_heure=val(stringfield(b$,1,":"))
	AC_Minut =val(stringfield(b$,2,":"))
	
	heure_restante=R_heure-AC_heure
	minute_restante=R_Minut-AC_Minut
	if minute_restante<0
		heure_restante=heure_restante-1
		minute_restante=minute_restante+60
	Endif
	result$=str(heure_restante)+"heure et "+strf(minute_restante)+"minute(s)"
	ProcedureReturn result$
Endprocedure

;
;}
; Epb

Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Calcul avec des heures et des minutes

Message par Micoute »

Merci infiniment, je crois bien qu'il va falloir que je m'achète des neurones, mais je ne sais pas où on peut en trouver, de toute façon, je n'aurais pas les moyens !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Calcul avec des heures et des minutes

Message par Ar-S »

Avec un petit Timer pour éviter le clignotement des gadgets.

Code : Tout sélectionner

;***********************************************
;Titre  :*calcul_temps_restant
;Auteur  : Dobro
;Date  :15/06/2014
;Heure  :11:04:45
;Version Purebasic :  PureBasic 5.22 LTS (Windows - x86)
;Version de l'editeur :EPB V2.54
; Libairies necessaire : Aucune
;***********************************************


;{- Enumerations / DataSections
;{ Windows
Enumeration
   #Win
EndEnumeration

Enumeration
	#T ; Le timer
EndEnumeration
;}
;{ Gadgets
Enumeration
   #Text_Titre
   #Text_heure_actuel
   #Text_Heure_Now
   #Text_rendez_vous
   #String_Rendez_vous
   #Text_Attente
   #Text_Resultat
EndEnumeration
;}
;{ Fonts
Enumeration
   #Font_Text_Titre
   #Font_Text_Heure_Now
   #Font_Text_Resultat
EndEnumeration
;}
Define.l Event

Declare  OpenWindow_Win()
Declare.s Calcul(a$,b$)





;}

If OpenWindow(#Win, 450, 200, 363, 199, "Rendez vous", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
   TextGadget(#Text_Titre, 100, 10, 135, 45, "Rendez vous")
   TextGadget(#Text_heure_actuel, 20, 75, 45, 25, "il est :")
   TextGadget(#Text_Heure_Now, 60, 75, 105, 25, "")
   TextGadget(#Text_rendez_vous, 15, 115, 90, 25, "Rendez vous")
   StringGadget(#String_Rendez_vous, 115, 115, 45, 25, "13:20")
   TextGadget(#Text_Attente, 10, 150, 55, 25, "Attente")
   TextGadget(#Text_Resultat, 80, 145, 250, 30, "")
   ; Gadget Fonts
   SetGadgetFont(#Text_Titre, LoadFont(#Font_Text_Titre, "Microsoft Sans Serif", 12, #PB_Font_Bold|#PB_Font_HighQuality))
   SetGadgetFont(#Text_Heure_Now, LoadFont(#Font_Text_Heure_Now, "Microsoft Sans Serif", 10, #PB_Font_Bold|#PB_Font_HighQuality))
   SetGadgetFont(#Text_Resultat, LoadFont(#Font_Text_Resultat, "Microsoft Sans Serif", 12, #PB_Font_Bold|#PB_Font_HighQuality))
   
   AddWindowTimer(#Win, #T, 1000) ; Timer toutes les secondes
EndIf



;{- Event loop
Repeat
   
   rendez_vous$=GetGadgetText(#String_Rendez_vous)
   
   Event = WaitWindowEvent(12)
   Select Event
      ; ///////////////////

      ; /////// Ajout Ar-S ///////
      Case #PB_Event_Timer
      		Select EventTimer()
      			
      			Case #T
      				Time$ = FormatDate("%hh:%ii:%ss", Date())
   				SetGadgetText(#Text_Heure_Now,Time$)
   				result$=Calcul(rendez_vous$,Time$)
   				SetGadgetText(#Text_Resultat,result$)
   					
      		EndSelect		
        ; ////////// Fin Timer /////////////////////
   
      ; ////////////////////////
      Case #PB_Event_CloseWindow
      Select EventWindow()
         Case #Win
         CloseWindow(#Win)
         Break
      EndSelect
   EndSelect
ForEver


Procedure.s Calcul(a$,b$)
   ; by Dobro
   R_heure=Val(StringField(a$,1,":"))
   R_Minut =Val(StringField(a$,2,":"))
   AC_heure=Val(StringField(b$,1,":"))
   AC_Minut =Val(StringField(b$,2,":"))
   
   heure_restante=R_heure-AC_heure
   minute_restante=R_Minut-AC_Minut
   If minute_restante<0
      heure_restante=heure_restante-1
      minute_restante=minute_restante+60
   EndIf
   result$=Str(heure_restante)+" heure et "+StrF(minute_restante)+" minute(s)"
   ProcedureReturn result$
EndProcedure

;
;}
; Epb

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
beruska
Messages : 21
Inscription : sam. 28/mai/2011 12:32

Re: Calcul avec des heures et des minutes

Message par beruska »

assez simple:

Code : Tout sélectionner

Hrdv=15
Mnrdv=30

; transformer l'heure du rendez-vous et l'heure actuelle en minutes
attente = (Hrdv*60 + Mnrdv) - (Hour(Date())*60 + Minute(Date()))

; et reconvertir en heures-minutes
Debug "Attente = " + Str(Int(attente/60)) + ":" + Str(attente%60)
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: [Résolu] Calcul avec des heures et des minutes

Message par Micoute »

Merci beaucou beruska, c'est "au poil"

Merci beaucoup aussi à Ar_s
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre