Solved

Format elapsed time format to minutes

Posted on 2008-10-03
13
986 Views
Last Modified: 2013-11-29
I have a column on a table that stores an "elapsed time" in the following format 00:00:00 (HRS:MIN:SEC). I need to divide this time by a quantity.

Is there an easy way to do this, or will I need to break the time down into seconds then do the divide. If so, how do I do this? All these calculations will be done on a report or the query used to pull the data for the report.

Thanks!
0
Comment
Question by:filtrationproducts
  • 5
  • 5
  • 2
  • +1
13 Comments
 
LVL 8

Expert Comment

by:Emil_Gray
ID: 22635233
Here is a function that takes number of seconds and calculates hours, minutes and seconds. You can modify it for your purposes. The second smaller function is necessary to add an "s" to the end of the words "hour", "minute" and "second" when necessary.
 

Function SecondsToText(Seconds) As String

Dim bAddComma As Boolean

Dim Result As String

Dim sTemp As String

Dim years As Double 'add code

Dim months As Double 'add code

Dim days As Double

Dim hours As Double

Dim minutes As Double
 

If Seconds <= 0 Or Not IsNumeric(Seconds) Then

     SecondsToText = "0 seconds"

     Exit Function

End If
 

Seconds = Fix(Seconds)
 

If Seconds >= 86400 Then

  days = Fix(Seconds / 86400)

Else

  days = 0

End If
 

If Seconds - (days * 86400) >= 3600 Then

  hours = Fix((Seconds - (days * 86400)) / 3600)

Else

  hours = 0

End If
 

If Seconds - (hours * 3600) - (days * 86400) >= 60 Then

 minutes = Fix((Seconds - (hours * 3600) - (days * 86400)) / 60)

Else

 minutes = 0

End If
 

Seconds = Seconds - (minutes * 60) - (hours * 3600) - _

   (days * 86400)
 

If Seconds > 0 Then Result = Seconds & " second" & AutoS(Seconds)
 

If minutes > 0 Then

    bAddComma = Result <> ""

    

    sTemp = minutes & " minute" & AutoS(minutes)

    If bAddComma Then sTemp = sTemp & ", "

    Result = sTemp & Result

End If
 

If hours > 0 Then

    bAddComma = Result <> ""

    

    sTemp = hours & " hour" & AutoS(hours)

    If bAddComma Then sTemp = sTemp & ", "

    Result = sTemp & Result

End If
 

If days > 0 Then

    bAddComma = Result <> ""

    sTemp = days & " day" & AutoS(days)

    If bAddComma Then sTemp = sTemp & ", "

    Result = sTemp & Result

End If
 

SecondsToText = Result

End Function
 

Function AutoS(Number)

    If Number = 1 Then AutoS = "" Else AutoS = "s"

End Function

Open in new window

0
 
LVL 1

Author Comment

by:filtrationproducts
ID: 22635379
That is the most confusing thing I have ever seen.

Can we simplify this?

I need the calculation in VB to change this data "00:06:30" in a text field equaling (6 minutes & 30 seconds) down to only seconds and format it as a simple number (360) so I can use it in a calculation.
0
 
LVL 8

Assisted Solution

by:Emil_Gray
Emil_Gray earned 25 total points
ID: 22635526
That is what the function does but you have to convert the "00:06:30" to 390 and use the function.
It is simple to do.
Multiply the number of hours by 3600.
Multiply the number of minutes by 60.
Add the results to the number of seconds and use the final result which is the total number of seconds in the provided function.
In your example: 390 seconds used in the function returns:
6 minutes, 30 seconds
0
 
LVL 8

Expert Comment

by:Emil_Gray
ID: 22635621
Here is how simple it is:
?SecondsToText(390)
6 minutes, 30 seconds
0
 
LVL 23

Accepted Solution

by:
irudyk earned 75 total points
ID: 22637188
If you just want to get the number of seconds and divide it by some other field value use (as Emil_Gray alluded to in his post):
In a report set the field's Control Source to:
=(Hour([TimeField])*3600+Minute(TimeField])*60+Second(TimeField]))/[QuantityField]
In a query (design view), add a column with the following:
CalculatedValue: (Hour([TimeField])*3600+Minute(TimeField])*60+Second(TimeField]))/[QuantityField]
Replace [TimeField] and [QuantityField] with your applicable field names.
0
 
LVL 1

Author Comment

by:filtrationproducts
ID: 22637676
irudyk,
Does it matter that the "timestudy" field that holds the 00:00:00 time is only a text field?
0
Complete VMware vSphere® ESX(i) & Hyper-V Backup

Capture your entire system, including the host, with patented disk imaging integrated with VMware VADP / Microsoft VSS and RCT. RTOs is as low as 15 seconds with Acronis Active Restore™. You can enjoy unlimited P2V/V2V migrations from any source (even from a different hypervisor)

 
LVL 1

Author Comment

by:filtrationproducts
ID: 22637754
nevermind
0
 
LVL 8

Expert Comment

by:Emil_Gray
ID: 22637947
No, it doesn't matter. Here is what happens when using the following query formula with a text field of "00:06:30". If used with the 2 functions I provided you get...
SecondsToText((Hour([myTime])*3600)+(Minute([myTime])*60)+Second([myTime]))
6 minutes, 30 seconds
0
 
LVL 74

Expert Comment

by:Jeffrey Coachman
ID: 22643164
filtrationproducts,

I think we have drifted away from your original question:
  "I have a column on a table that stores an "elapsed time" in the following format 00:00:00 (HRS:MIN:SEC). I need to divide this time by a quantity.
Is there an easy way to do this?"
also:
  "Does it matter that the "timestudy" field that holds the 00:00:00 time is only a text field?"

I used this, and it worked beautifully,
(Yes, Timestudy is Text in this example)

SELECT tblElapsedTime.TimeStudy, tblElapsedTime.Divisor, Format(CDate([TimeStudy])/[Divisor],"hh:nn:ss") AS Result
FROM tblElapsedTime;

Basically, this converts the Text, (Timestudy), to Date/Time, divides it by the divisor and then formats the result as Date/Time
For example:
1:30:30 divided by 2, results in: 00:45:15
05:22:16 divided by 2, results in: 02:41:08
9:45:09 divided by *3*, results in: 03:15:03

Here is a  sample

If this is what you want, great.
If not, then please give an example of your Elapsed Time, a divisor, and the *exact* result you want.

Thanks

JeffCoachman

Access-EEQ23785086-DivideElapsed.mdb
0
 
LVL 74

Expert Comment

by:Jeffrey Coachman
ID: 22644670
filtrationproducts

Hmmm, I just re-read your post.

You need minutes only.

Sory about that.

I am sure the other experts here can get you going.
;-)

JeffCoachman
0
 
LVL 8

Expert Comment

by:Emil_Gray
ID: 22645136
I do not understand why this seems so difficult. I have already provided a function that does what you want.
All you need do is use the code I provided earlier to create two functions. Then in a query use the following substituting "myTime" with the name of the field holding the text data.
SecondsToText((Hour([myTime])*3600)+(Minute([myTime])*60)+Second([myTime]))
It couldn't be simpler.
0
 
LVL 1

Author Comment

by:filtrationproducts
ID: 22651561
sorry for the delay, I dont work on the weekends. But irudyk's code was very simple and did exactally what I wanted.

"In a report set the field's Control Source to:
=(Hour([TimeField])*3600+Minute([TimeField])*60+Second([TimeField]))/[QuantityField]"

That is the line of code I was looking for. Kudos irudyk.

Also everyone else, thanks for your help!
0
 
LVL 1

Author Closing Comment

by:filtrationproducts
ID: 31502769
Solution:
=(Hour([TimeField])*3600+Minute(TimeField])*60+Second(TimeField]))/[QuantityField]
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In Debugging – Part 1, you learned the basics of the debugging process. You learned how to avoid bugs, as well as how to utilize the Immediate window in the debugging process. This article takes things to the next level by showing you how you can us…
Experts-Exchange is a great place to come for help with solutions for your database issues, and many problems are resolved within minutes of being posted.  Others take a little more time and effort and often providing a sample database is very helpf…
Familiarize people with the process of retrieving data from SQL Server using an Access pass-thru query. Microsoft Access is a very powerful client/server development tool. One of the ways that you can retrieve data from a SQL Server is by using a pa…
With Microsoft Access, learn how to start a database in different ways and produce different start-up actions allowing you to use a single database to perform multiple tasks. Specify a start-up form through options: Specify an Autoexec macro: Us…

867 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now