 1. ## over-night, used minutes

I have problem, update #3

I need Check between IN and OUT time
I use (Out - In) = NeedResult

But result is "130", any method can result is "90" ?

Code:
```
Private Sub Command1_Click()

intIn = CInt("0900") '09:00
intOut = CInt("1030") '10:30

t = intOut - intIn '10:30 - 09:00 ,

msgbox "used mins" & t

End Sub```  Reply With Quote

2. ## Re: used minutes

But result is "130",
Yes it will be 130, because the substraction will be done on numeric variables, because you are converted them to integers.
To get the minutes i would recommend you to work with dates (time in this case), so you can use the datetime.datediff method to get the differences between two date stamps.

Code:
```  Dim vT1 As Variant, vT2 As Variant, vTR As Variant
vT1 = CDate("09:00")
vT2 = CDate("10:30")

vTR = DateTime.DateDiff("n", vT1, vT2) 'the "n" stands for the minutes.
Debug.Print vTR```  Reply With Quote

3. ## Re: used minutes

I write this method, is look fine ?

I try
IN:2345, OUT:2359, result is "14", correct!
IN:0000, OUT:0101, result is "61" , correct!

if Over-Night: PROBLEM:
IN:2345, OUT:0000 ,result "-1425" , WRONG, I known is used 15mins
IN:2345, OUT:0015, result "-1410", wrong, I known is used 30mins

result is wrong? can help me to fix !

Code:
```Option Explicit

Private Sub Command1_Click()

Dim a As String
Dim InTime As String
a = tin.Text
InTime = Mid(a, 1, 2) & ":" & Mid(a, 3, 2) & ":" & "00"

Dim b As String
Dim OutTime As String
b = tout.Text
OutTime = Mid(b, 1, 2) & ":" & Mid(b, 3, 2) & ":" & "00"

Dim ra As String
Dim rb As String

ra = Format(InTime, "hh:mm:ss")
rb = Format(OutTime, "hh:mm:ss")

'DateTime.DateDiff
'h Hour
'n Minute
's Second

Dim rc As String

rc = DateTime.DateDiff("n", ra, rb)

MsgBox rc

End Sub```  Reply With Quote

4. ## Re: used minutes

i would use variants instead of strings (ra, rb, rc) . i also recommended the CDate because it is just a somewhat compact way to convert strings/numbers to valid datestamps, while Fomat() is an extended method, with a lots of formating options. you just have to split the hour:min:sec with ":" as a delimiter and CDate() will interpret it as time, and will do the conversions just fine.

IN:2345, OUT:0000 ,result "-1425" , WRONG, I known is used 15mins
IN:2345, OUT:0015, result "-1410", wrong, I known is used 30mins
Yes it will be. To avoid this to happen you might extend the datestamps with valid dates as well.
Code:
```  vT1 = CDate("11-01 23:45")
vT2 = CDate("11-02 00:30")```
This will be an "anyyear",november 1 and november 2. you can save the month and day values when the timing starts, then at the end you have to inlude the actual month and day. you can also use the DateTime.DateValue(Now) to get the actual year.month.day in a string.

Code:
`  vT1 = CDate(DateTime.DateValue(Now) & "23:45")`  Reply With Quote

5. ## Re: over-night, used minutes

Thanks, I rewrite it. Is Look fine ?
But problem:
(Q1) If over-night, is simple
vT1 = anyMonth, anyDay,
vT2 = anyMonth, anyDay + 1 ?

(Q2) vT1 = CDate(InTime)
Only accept InTime string = "23:45",
NOT "23:45:00" ?

Code:
```Option Explicit

Private Sub Command1_Click()

Dim a As String
a = Text1.Text
Dim InTime As String
InTime = Mid(a, 1, 2) & ":" & Mid(a, 3, 2) '& ":" & "00"

Dim b As String
b = Text2.Text
Dim OutTime As String
OutTime = Mid(b, 1, 2) & ":" & Mid(b, 3, 2) '& ":" & "00"

Dim vT1 As Date
Dim vT2 As Date
Dim vTR As Long

vT1 = CDate(InTime)
vT2 = CDate(OutTime)

vTR = DateTime.DateDiff("n", vT1, vT2) 'the "n" stands for the minutes.

If vTR < 0 Then

vT1 = CDate("11-01" & " " & CStr(InTime))
vT2 = CDate("11-02" & " " & CStr(OutTime))
vTR = DateTime.DateDiff("n", vT1, vT2) 'the "n" stands for the minutes.

End If

MsgBox vTR

End Sub```  Reply With Quote

6. ## Re: over-night, used minutes

yes, it should work. but, can't you just store the datestamp with the timestamp? so you can compare the valid dates then. but it might not be necessary at all.  Reply With Quote

7. ## Re: over-night, used minutes

Thanks, I Done it.
I Not use "CDate", changed To used "DateSerial, TimeSerial"
CDate maybe that something bug, I fixed ?

I need only calc working time only, that date string is anyYear,anyMonth,anyDate OR need correct date /Today()?

Code:
```Option Explicit

Private Sub Command1_Click()

Dim a As String
Dim b As String

If t1.Text = "" Then t1.Text = "0000"
a = t1.Text

If t2.Text = "" Then t2.Text = "0800"
b = t2.Text

Dim vT1 As Date
Dim vT2 As Date
Dim vTR As Long

vT1 = DateSerial(2009, 11, 1) + TimeSerial(CInt(Mid(a, 1, 2)), CInt(Mid(a, 3, 2)), 0)
vT2 = DateSerial(2009, 11, 1) + TimeSerial(CInt(Mid(b, 1, 2)), CInt(Mid(b, 3, 2)), 0)
vTR = DateTime.DateDiff("n", vT1, vT2)

If vTR < 0 Then
vT1 = DateSerial(2009, 11, 1) + TimeSerial(CInt(Mid(a, 1, 2)), CInt(Mid(a, 3, 2)), 0)
vT2 = DateSerial(2009, 11, 2) + TimeSerial(CInt(Mid(b, 1, 2)), CInt(Mid(b, 3, 2)), 0)
vTR = DateTime.DateDiff("n", vT1, vT2)
End If

t3.Text = vTR

t4.Text = vTR \ 60 & ":" & vTR Mod 60

End Sub```  Reply With Quote

#### Posting Permissions

• You may not post new threads
• You may not post replies
• You may not post attachments
• You may not edit your posts
•

Featured