Jump to content

Recommended Posts

Posted

Hello, I am writing a program that is required to calculate the change in time. The user puts in a start and finish time and gets out the change. I got it to work, however there is a bug. Say the start time is 24 hours and 50 minutes, and the end time is 25 hours and 10 minutes. It should be 20 minutes. However is is saying 1 hour and 20 minutes. Is there any way I can accurately calculate this without having to convert to minutes? Here is an example of what I mean:

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("", 503, 167, 192, 124)
$Input1 = GUICtrlCreateInput("", 24, 40, 121, 21)
$Input2 = GUICtrlCreateInput("", 24, 72, 121, 21)
$Input3 = GUICtrlCreateInput("", 264, 40, 121, 21)
$Input4 = GUICtrlCreateInput("", 264, 72, 121, 21)
$Label1 = GUICtrlCreateLabel("Hours", 152, 40, 36, 17)
$Label2 = GUICtrlCreateLabel("Minutes", 152, 72, 36, 17)
$Label3 = GUICtrlCreateLabel("Hours", 392, 40, 36, 17)
$Label4 = GUICtrlCreateLabel("Minutes", 392, 72, 36, 17)
$Button1 = GUICtrlCreateButton("Calculate", 208, 120, 75, 25)
$Group1 = GUICtrlCreateGroup("Start Time", 16, 24, 233, 81)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("End Time", 256, 24, 241, 81)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)


While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            _Calculate()
    EndSwitch
WEnd

Func _Calculate()
    $hourread1 = GUICtrlRead($Input1)
    $hourread2 = GUICtrlRead($Input3)
    $minutesread1 = GUICtrlRead($Input2)
    $minutesread2 = GUICtrlRead($Input4)
    $Form2 = GUICreate("", 294, 89, 302, 218)
    $Input5 = GUICtrlCreateInput("", 8, 16, 121, 21)
    $Input6 = GUICtrlCreateInput("", 8, 56, 121, 21)
    $Label5 = GUICtrlCreateLabel("Hours", 136, 16, 124, 17)
    $Label6 = GUICtrlCreateLabel("Minutes", 136, 56, 124, 17)
    GUISetState(@SW_SHOW)
    $finalhours = $hourread2 - $hourread1
    $minutesfinal = $minutesread2 - $minutesread1
    GUICtrlSetData($Input5, $finalhours)
    If $minutesfinal < 0 Then
        $minutesfinal2 = 60 - $minutesread2
        $minutesfinal3 = $minutesfinal + $minutesread1
        GUICtrlSetData($Input6, $minutesfinal3)
    EndIf
    If $minutesfinal >= 0 Then
        GUICtrlSetData($Input6, $minutesfinal)
    EndIf
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd
EndFunc

I know this probably is not the best way to do it but if there is any other way please help me.

Posted (edited)

Hello derkaderka,

Try This Calculate() function:

Func _Calculate()
    $hourread1 = GUICtrlRead($Input1)
    $hourread2 = GUICtrlRead($Input3)
    $minutesread1 = GUICtrlRead($Input2)
    $minutesread2 = GUICtrlRead($Input4)
    $Form2 = GUICreate("", 294, 89, 302, 218)
    $Input5 = GUICtrlCreateInput("", 8, 16, 121, 21)
    $Input6 = GUICtrlCreateInput("", 8, 56, 121, 21)
    $Label5 = GUICtrlCreateLabel("Hours", 136, 16, 124, 17)
    $Label6 = GUICtrlCreateLabel("Minutes", 136, 56, 124, 17)
    GUISetState(@SW_SHOW)
    $finalhours = $hourread2 - $hourread1
    If $minutesread1>$minutesread2 Then
        $finalhours -=1
        $minutesread2 +=60
    EndIf
    $minutesfinal = $minutesread2 - $minutesread1
    GUICtrlSetData($Input5, $finalhours)
    GUICtrlSetData($Input6, $minutesfinal)
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
        EndSwitch
    WEnd
EndFunc

Realm

Edited by Realm

My Contributions: Unix Timestamp: Calculate Unix time, or seconds since Epoch, accounting for your local timezone and daylight savings time. RegEdit Jumper: A Small & Simple interface based on Yashied's Reg Jumper Function, for searching Hives in your registry. 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...