Rick
2009-Jul-05 23:23 UTC
If storing duration as integer seconds... question on building a helper
Ok, I''m new to rails (and Ruby)... I''m trying to figure out the best practice for handling a duration field (for example "time it takes someone to run a mile." ) All I care about is seconds (not milliseconds) so figured I''d store the field as an integer. I want to allow the user to enter in the time manually as: //1 minute 5 seconds: 1:05 OR 01:05 //2 hours 4 minutes 6 seconds: 2:04:06 OR 02:04:06 I have a helper that will convert seconds to a time display as: def seconds_to_time seconds Time.at(seconds).gmtime.strftime(''%R:%S'') end But how should I handle the conversion the other way around from the input (ie convert 01:35 to seconds?) Do I need to do some complex parsing of the String itself parsing out : (remember it could be xx:xx:xx or just xx:xx ) or can I somehow leverage Time.parse ? I would think this would come up quite often so there must be a best practice or easy way to handle this kind of thing. Thanks in advance
Rick
2009-Jul-06 03:44 UTC
Re: If storing duration as integer seconds... question on building a helper
I currently decided to just use something like: def time_to_seconds time_display time = time_display.split(":") seconds = 0 modifiers = [ 1, 60, 360 ] time.each_with_index do | t, i | seconds = seconds + ( t.to_i * modifiers[time.length -1 - i] ) end return seconds end On Sun, Jul 5, 2009 at 7:23 PM, Rick<rickcr-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Ok, I''m new to rails (and Ruby)... > > I''m trying to figure out the best practice for handling a duration > field (for example "time it takes someone to run a mile." ) > > All I care about is seconds (not milliseconds) so figured I''d store > the field as an integer. > > I want to allow the user to enter in the time manually as: > > //1 minute 5 seconds: > 1:05 > OR > 01:05 > > //2 hours 4 minutes 6 seconds: > 2:04:06 > OR > 02:04:06 > > > I have a helper that will convert seconds to a time display as: > > def seconds_to_time seconds > Time.at(seconds).gmtime.strftime(''%R:%S'') > end > > But how should I handle the conversion the other way around from the > input (ie convert 01:35 to seconds?) > Do I need to do some complex parsing of the String itself parsing out > : (remember it could be xx:xx:xx or just xx:xx ) > or can I somehow leverage Time.parse ? > > I would think this would come up quite often so there must be a best > practice or easy way to handle this kind of thing. > > Thanks in advance >-- Rick R
s.ross
2009-Jul-06 18:52 UTC
Re: If storing duration as integer seconds... question on building a helper
On Jul 5, 2009, at 8:44 PM, Rick wrote:> > I currently decided to just use something like: > > def time_to_seconds time_display > time = time_display.split(":") > seconds = 0 > modifiers = [ 1, 60, 360 ] > time.each_with_index do | t, i | > seconds = seconds + ( t.to_i * modifiers[time.length -1 - i] ) > end > return seconds > end >If you''re just looking for a quick way to convert from hh:mm:ss to seconds, how about: time_string.split('':'').inject(0){|a, m| a = a * 60 + m.to_i} This presumes that the smallest increment in the string is seconds, and the largest hours. However, that is how you described the problem. WDYT?> On Sun, Jul 5, 2009 at 7:23 PM, Rick<rickcr-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: >> Ok, I''m new to rails (and Ruby)... >> >> I''m trying to figure out the best practice for handling a duration >> field (for example "time it takes someone to run a mile." ) >> >> All I care about is seconds (not milliseconds) so figured I''d store >> the field as an integer. >> >> I want to allow the user to enter in the time manually as: >> >> //1 minute 5 seconds: >> 1:05 >> OR >> 01:05 >> >> //2 hours 4 minutes 6 seconds: >> 2:04:06 >> OR >> 02:04:06 >> >> >> I have a helper that will convert seconds to a time display as: >> >> def seconds_to_time seconds >> Time.at(seconds).gmtime.strftime(''%R:%S'') >> end >> >> But how should I handle the conversion the other way around from the >> input (ie convert 01:35 to seconds?) >> Do I need to do some complex parsing of the String itself parsing out >> : (remember it could be xx:xx:xx or just xx:xx ) >> or can I somehow leverage Time.parse ? >> >> I would think this would come up quite often so there must be a best >> practice or easy way to handle this kind of thing. >> >> Thanks in advance >> > > > > -- > Rick R > > >
Rick
2009-Jul-06 20:32 UTC
Re: If storing duration as integer seconds... question on building a helper
On Mon, Jul 6, 2009 at 2:52 PM, s.ross<cwdinfo-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > On Jul 5, 2009, at 8:44 PM, Rick wrote: > >> >> I currently decided to just use something like: >> >> def time_to_seconds time_display >> time = time_display.split(":") >> seconds = 0 >> modifiers = [ 1, 60, 360 ] >> time.each_with_index do | t, i | >> seconds = seconds + ( t.to_i * modifiers[time.length -1 - i] ) >> end >> return seconds >> end >> > > If you''re just looking for a quick way to convert from hh:mm:ss to > seconds, how about: > > time_string.split('':'').inject(0){|a, m| a = a * 60 + m.to_i} >Wow! That looks awesome. I''m new to ruby so just looked into the inject method. I''ll test it shortly. Thanks a lot. (It looks like it should work if you provided just minutes and seconds 10:04 or hours:min:sec 1:14:05 )