About active_record timestamps

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?

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!

On Jul 15, 2010, at 2:57 AM, Guo Y. 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.

On Jul 15, 2010, at 1:17 PM, Philip H. wrote:

Thanks!

Try:

Product.find(:all, :conditions => [“DATE(created_at) = ?”,
selected_date])

-Rob

Rob B.
[email protected] http://AgileConsultingLLC.com/
[email protected] http://GaslightSoftware.com/

On Thu, Jul 15, 2010 at 10:09 PM, Rob B.
[email protected] wrote:

1 If selected_date is a Date object while created_at is a DateTime
for any record created on that date using a range or something else.
Thanks!

Try:

Product.find(:all, :conditions => [“DATE(created_at) = ?”, selected_date])

-Rob

But have in mind that this wont use the created_at index (if you have
one)

On 15 July 2010 20:09, Rob B. [email protected]
wrote:

1 If selected_date is a Date object while created_at is a DateTime
for any record created on that date using a range or something else.
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

is going to contain date/time down to the second (or more). If you pass in

My talbe has another date type field which i want it to be local

Product.find(:all, :conditions => [“DATE(created_at) = ?”, selected_date])

Will that have to do a calculation on every record to determine DATE?

Yes. And as Christos said, you lose the use of the index.

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.

d = Time.now
Product.find(:all, :conditions => [“created_at BETWEEN ? AND ?”,
d.beginning_of_day, d.end_of_day])

would work…

-philip

On Thu, Jul 15, 2010 at 12:09 PM, Rob B.
[email protected] wrote:

Try:

Product.find(:all, :conditions => [“DATE(created_at) = ?”, selected_date])

Note: this makes an assumption about what DB you’re using – e.g.
Oracle has no such function and will throw an error :slight_smile:

FWIW,

Hassan S. ------------------------ [email protected]
twitter: @hassan

Thank you! it make me confident.