On 15 July 2010 20:09, Rob Biedenharn <[email protected]> wrote:
> On Jul 15, 2010, at 1:17 PM, Philip Hallstrom wrote:
>>
>> On Jul 15, 2010, at 2:57 AM, Guo Yangguang wrote:
>>>
>>> hi
>>> I want to build a filter that gets records from database based on
>>> selected date.such as
>>> ####
>>> Product.find(:all, :conditions => ["created_at = ?",selected_date])
>>> ####
>>> 1 If selected_date is a Date object while created_at is a DateTime
>>> object,is it work?
>>> 2 Do i need to set this?
>>
>> It will work just fine.  However, it won't do what you want...  created_at
>> is going to contain date/time down to the second (or more).  If you pass in
>> a date of "2010-07-15" it's going to append a time of "00:00:00" (most
>> likely).  So you're not going to get records created anytime during that
>> day.
>>
>> I'm guessing that's what you want.  If so you need to modify that to check
>> for any record created on that *date* using a range or something else.
>>
>>> ####
>>> ActiveRecord::Base.default_timezone = :utc
>>> ####
>>> My talbe has another date type field which i want it to be local
>>> timezone,so it seems i should not set
>>> ActiveRecord::Base.default_timezone = :utc,but my filter will not works
>>> well because of the default local timezone setting for the createdz_at
>>> attribute.How to resolve these problem?
>>>
>>> Thanks!
>>> --
>
>
> Try:
>
>  Product.find(:all, :conditions => ["DATE(created_at) = ?", selected_date])

Will that have to do a calculation on every record to determine DATE?
If so would it be more efficient to specify a range for created_at
instead (something like >= selected_date and < selected_date + 1.day)?
 Particularly if there were an index on the column.

Colin

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to