• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 734
  • Last Modified:

Trying to format datediff Hours, Minutes, Seconds

I track the date and time a user enters a site and leaves. I obtain the Hours, Minutes and Seconds with the following code:

            LoggedTimeHours = datediff("h", request.Cookies("TimeIn"), now())
            LoggedTimeMinutes = datediff("n", request.Cookies("TimeIn"), now())
            LoggedTimeSeconds = datediff("s", request.Cookies("TimeIn"), now())

It gives me results such as... 0 : 4 : 190 (Hours:Minutes:Seconds).

For longer Times I've also Noticed that the minutes can be in the hundreds and the seconds in the thousands.

I'm guessing that this is because what it is giving is the TOTAL number of hours/minutes/seconds between the two dates.

Does anyone have a reliable routine to break down the three numbers to show the time that has passed, (ie. 1 Hours : 2 Minutes : 45 Seconds), instead of the total number of each?
Thanks
0
fisherbrsnch00
Asked:
fisherbrsnch00
1 Solution
 
kingsfan76Commented:
here's a link to a post that i answered that does almost exactly the same thing.

you probably only need to change the line

totalSec = datediff("S",CurrentDate,EndDate)

to

totalSec = datediff("S", request.Cookies("TimeIn"), now())

and you might want to take out the day part if you don't want to display number of days
if you have any further question on the codes i'll be glad to help
0
 
DexstarCommented:
fisherbrsnch00:
> Does anyone have a reliable routine to break down the three numbers to
> show the time that has passed, (ie. 1 Hours : 2 Minutes : 45 Seconds),
> instead of the total number of each?

Try this:

    const cSecondsPerDay         = 86400    ' 60*60*24
    const cSecondsPerHour       = 3600      ' 60*60
    const cSecondsPerMinute    = 60           ' Duh
   
    Function GetCountdownString( dtTarget )
        Dim dtTemp
        Dim nDays
        Dim nHours
        Dim nMinutes
        Dim nSeconds
        Dim strUnits
   
        On Error Resume Next
        dtTemp = CDate(dtTarget)
        If Err.Number <> 0 Then
            GetCountdownString = "Invalid Date"
        Else
            If dtTemp > Now() Then
                nSeconds = DateDiff("s", Now(), dtTemp)
            Else
                nSeconds = DateDiff("s", dtTemp, Now())
            End If
   
            ' Subtracting 0.5 forces it to truncate instead of round
            nDays        = CInt(nSeconds / cSecondsPerDay - 0.5)
            nSeconds    = nSeconds MOD cSecondsPerDay
            nHours        = CInt(nSeconds / cSecondsPerHour - 0.5)
            nSeconds    = nSeconds MOD cSecondsPerHour
            nMinutes    = CInt(nSeconds / cSecondsPerMinute - 0.5)
            nSeconds    = nSeconds MOD cSecondsPerMinute
   
            GetCountdownString = ""
   
            If nDays = 1 Then
                strUnits = "Day"
            Else
                strUnits = "Days"
            End If
            GetCountdownString = GetCountdownString & nDays & " " & strUnits & ", "
   
            If nHours = 1 Then
                strUnits = "Hour"
            Else
                strUnits = "Hours"
            End If
            GetCountdownString = GetCountdownString & nHours & " " & strUnits & ", "
   
            If nMinutes = 1 Then
                strUnits = "Minute"
            Else
                strUnits = "Minutes"
            End If
            GetCountdownString = GetCountdownString & nMinutes & " " & strUnits & ", "
   
            If nSeconds = 1 Then
                strUnits = "Second"
            Else
                strUnits = "Seconds"
            End If
            GetCountdownString = GetCountdownString & nSeconds & " " & strUnits
        End If
    End Function

Then if you want to get the total time, just pass in Request.Cookies("TimeIn") as a parameter to that function, and it will return a string that gives you the result.  You may want to tweak the function a little to get the exact format you want.  I'll help with that if you aren't sure what to do.  Just tell me what you want it to look like.

HTH,
Dex*
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
fisherbrsnch00Author Commented:
kingsfan76, thanks, that worked great.
 
Tasneem, thanks for the post, but I've already implemented kingsfan76's code and I prefer doing these calculations on the server side.
0
 
fisherbrsnch00Author Commented:
My mistake, it was Dexstar's code that I used. So thank you Dexstar.
0
 
DexstarCommented:
fisherbrsnch00:

> My mistake, it was Dexstar's code that I used. So thank you Dexstar.

You're welcome.  Glad you got it working.  :)

-D*
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now