Hey all, I have 90 records in database with this kind of format: 2011-05-10 11:23:15 So they are all 2011-05-10 but have different times. User enters two dates, and just in case the two dates are the same, I want to ensure I grab all records that span entire day. So I do this: unit.reports.reports_for(Date.parse(''5/10/2011'').beginning_of_day,Date.parse(''5/10/2011'').end_of_day) But it returns empty result: => [] reports_for scope looks like this: scope :reports_for, lambda { |start_date, end_date| where("time between ? and ?", start_date, end_date) } Problem is the sql looks like this: SELECT "reports".* FROM "reports" WHERE ("reports".unit_id = 1113) AND (time between ''2011-10-05 00:00:00.000000'' and ''2011-10-05 23:59:59.999999'') ORDER BY time desc LIMIT 20 OFFSET 0 Right now the user input looks like this: unit.reports.reports_for(''2011/10/05'',''2011/10/06'') But I want it to be in this format: unit.reports.reports_for(''2011/05/10'',''2011/06/10'') thanks for response -- 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
This post helped me resolve my issue: http://www.ruby-forum.com/topic/57923 The key is using the strftime method. So now I can do this: units.reports.reports_for(Date.parse(Date.parse(''5/10/2011'').strftime(''%Y/ %d/ %m'')).beginning_of_day,Date.parse(Date.parse(''5/10/2011'').strftime(''%Y/ %d/%m'')).end_of_day) On Jan 17, 8:26 pm, John Merlino <stoici...-YDxpq3io04c@public.gmane.org> wrote:> Hey all, > > I have 90 records in database with this kind of format: 2011-05-10 > 11:23:15 > > So they are all 2011-05-10 but have different times. > > User enters two dates, and just in case the two dates are the same, I > want to ensure I grab all records that span entire day. > > So I do this: > > unit.reports.reports_for(Date.parse(''5/10/2011'').beginning_of_day,Date.pars e(''5/10/2011'').end_of_day) > > But it returns empty result: > > => [] > > reports_for scope looks like this: > > scope :reports_for, lambda { |start_date, end_date| > where("time between ? and ?", start_date, end_date) > } > > Problem is the sql looks like this: > > SELECT "reports".* FROM "reports" WHERE ("reports".unit_id = 1113) AND > (time between ''2011-10-05 00:00:00.000000'' and ''2011-10-05 > 23:59:59.999999'') ORDER BY time desc LIMIT 20 OFFSET 0 > > Right now the user input looks like this: > > unit.reports.reports_for(''2011/10/05'',''2011/10/06'') > > But I want it to be in this format: > > unit.reports.reports_for(''2011/05/10'',''2011/06/10'') > > thanks for response-- 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Jan 17, 2012, at 8:26 PM, John Merlino wrote:> Hey all, > > > I have 90 records in database with this kind of format: 2011-05-10 > 11:23:15 > > So they are all 2011-05-10 but have different times. > > User enters two dates, and just in case the two dates are the same, I > want to ensure I grab all records that span entire day. > > So I do this: > > unit.reports.reports_for(Date.parse(''5/10/2011'').beginning_of_day,Date.parse(''5/10/2011'').end_of_day) > > But it returns empty result: > > => [] > > reports_for scope looks like this: > > scope :reports_for, lambda { |start_date, end_date| > where("time between ? and ?", start_date, end_date) > } > > > Problem is the sql looks like this: > > SELECT "reports".* FROM "reports" WHERE ("reports".unit_id = 1113) AND > (time between ''2011-10-05 00:00:00.000000'' and ''2011-10-05 > 23:59:59.999999'') ORDER BY time desc LIMIT 20 OFFSET 0Have you noticed that these are 2011-10-05 and you said in the first sentence 2011-05-10. Depending on which version of Ruby, a/b/YYYY where both a<=12 and b<=12, sometimes a is the month and sometimes b is the month. Your first issue is parsing the date format as input from the user. Take a look at Date#strptime irb(main):003:0> Date.strptime(''5/10/2011'', ''%m/%d/%Y'').to_s => "2011-05-10" irb(main):004:0> Date.strptime(''5/10/2011'', ''%d/%m/%Y'').to_s => "2011-10-05"> > Right now the user input looks like this: > > unit.reports.reports_for(''2011/10/05'',''2011/10/06'') > > But I want it to be in this format: > > unit.reports.reports_for(''2011/05/10'',''2011/06/10'') > > thanks for response > > -- > 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en. >-- 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.