[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Time range help

Mike Hamilton

5/14/2007 7:46:00 PM

I have 2 time objects and want to iterate over them by day. I figured
out that I can do:
a = Time.mktime(2007,5,1,0,0,0)
b = Time.mktime(2007,5,7,0,0,0)
(a..b).each { |val|
code goes here
}
but when I do that it iterates over seconds. Does anyone have a
suggestion on how to iterate over a different period when using Time
objects?

--
Posted via http://www.ruby-....

4 Answers

Axel Etzold

5/14/2007 7:56:00 PM

0

Try this:


t1 = Time.mktime(2001,3,15,21,30,15)
t2= Time.mktime(2001,3,19,21,30,15)
(t1.day..t2.day).each_with_index{|x,i|
puts "Day #{i} was ... #{x}"
}

# ... and ...

p t1.methods

gives ... for months : t1.mon etc ...


Best regards,

Axel

> I have 2 time objects and want to iterate over them by day. I figured
> out that I can do:
> a = Time.mktime(2007,5,1,0,0,0)
> b = Time.mktime(2007,5,7,0,0,0)
> (a..b).each { |val|
> code goes here
> }
> but when I do that it iterates over seconds. Does anyone have a
> suggestion on how to iterate over a different period when using Time
> objects?
>
> --
> Posted via http://www.ruby-....

--
Psssst! Schon vom neuen GMX MultiMessenger gehört?
Der kanns mit allen: http://www.gmx.net/de/go/mult...

Mike Hamilton

5/14/2007 8:02:00 PM

0

Glen Holcomb wrote:
> Does it have to be a time object? Date has some methods that will do
> what
> you want without much if any hassle.
>
> On 5/14/07, Mike Hamilton <mikehamiltonca@gmail.com> wrote:
>> objects?
>>
>> --
>> Posted via http://www.ruby-....
>>
>>
>
>
> --
> "Hey brother christian with your high and mighty errand, Your actions
> speak
> so loud, I can't hear a word you're saying."
>
> -Greg Graffin (Bad Religion)
Well - I know how to do it with a date object but the objects I'm using
are already Time objects. The actual problem is that the dates that I'm
iterating over are entered in a local timezone and then converted to
gmtime for a SQL query. All the date values are stored in the database
in gmtime, so in order to run the query I have to have the time
included. That's why iterating over the time object would be ideal, so
that I can include the appropriate gmtime adjustment in the query
values.


--
Posted via http://www.ruby-....

Rob Biedenharn

5/14/2007 8:34:00 PM

0

On May 14, 2007, at 4:02 PM, Mike Hamilton wrote:
> Glen Holcomb wrote:
>> Does it have to be a time object? Date has some methods that will do
>> what
>> you want without much if any hassle.
>>
>> On 5/14/07, Mike Hamilton <mikehamiltonca@gmail.com> wrote:
>>> I have 2 time objects and want to iterate over them by day. I
>>> figured
>>> out that I can do:
>>> a = Time.mktime(2007,5,1,0,0,0)
>>> b = Time.mktime(2007,5,7,0,0,0)
>>> (a..b).each { |val|
>>> code goes here
>>> }
>>> but when I do that it iterates over seconds. Does anyone have a
>>> suggestion on how to iterate over a different period when using Time
>>> objects?
>>
>> --
>> "Hey brother christian with your high and mighty errand, Your actions
>> speak
>> so loud, I can't hear a word you're saying."
>>
>> -Greg Graffin (Bad Religion)
> Well - I know how to do it with a date object but the objects I'm
> using
> are already Time objects. The actual problem is that the dates that
> I'm
> iterating over are entered in a local timezone and then converted to
> gmtime for a SQL query. All the date values are stored in the database
> in gmtime, so in order to run the query I have to have the time
> included. That's why iterating over the time object would be ideal, so
> that I can include the appropriate gmtime adjustment in the query
> values.

Why do you need to iterate over them? If these values are already in
the database, can't you just use:

:conditions => { :some_gmt_datetime_column => a..b }

which becomes a where clause like "some_gmt_datetime_column BETWEEN
'2007-05-01' AND '2007-05-07'" (or whatever a.to_s(:db) gives)

If this doesn't help, perhaps you could explain your query a bit more
and where you think the iteration is needed.

-Rob

Rob Biedenharn http://agileconsult...
Rob@AgileConsultingLLC.com




Mike Hamilton

5/14/2007 9:10:00 PM

0

Rob Biedenharn wrote:
> On May 14, 2007, at 4:02 PM, Mike Hamilton wrote:
>>>> b = Time.mktime(2007,5,7,0,0,0)
>>> so loud, I can't hear a word you're saying."
>> that I can include the appropriate gmtime adjustment in the query
>> values.
>
> Why do you need to iterate over them? If these values are already in
> the database, can't you just use:
>
> :conditions => { :some_gmt_datetime_column => a..b }
>
> which becomes a where clause like "some_gmt_datetime_column BETWEEN
> '2007-05-01' AND '2007-05-07'" (or whatever a.to_s(:db) gives)
>
> If this doesn't help, perhaps you could explain your query a bit more
> and where you think the iteration is needed.
>
> -Rob
>
> Rob Biedenharn http://agileconsult...
> Rob@AgileConsultingLLC.com

The challenge is that the database is just something I'm reporting off
of and isn't something that I designed or built in Rails so I'm doing a
lot of raw SQL. I did manage to find a way around it by building a date
range off of the time objects, iterating over that, and keeping the time
values constant by building them off of the Time objects as well. Works
well enough for what I'm trying to do!
Thanks for the input!

--
Posted via http://www.ruby-....