Ruby on Rails Tuesday, January 29, 2013

Hi!


I have a table with visits with a visited_at: attribute which is a datetime field. They seem to be stored as UTC. Now I want to count all visits each day and return something like:
{
  2013-01-01: 8,
  2013-01-02: 4,
  2013-01-07: 9,
  ...
}

So, I did it like this which kind of works...:
  def self.total_grouped_by_day(start_date, end_date)
    visits = where(visited_at: start_date..end_date)
    visits = visits.group("date(visited_at)")
    visits = visits.select("date(visited_at) as date, count(visits.id) as total_visits")
    visits = visits.order("date ASC")
    visits.group_by { |v| v.date.to_date }
  end

It doesn't return exactly the format I want but that's not the big problem. The problem is that if a visit happens near midnight it may be counted at the "wrong" date due to time zones. I understand why, because "date(visited_at)" doesn't know anything about my timezone.

Any good ideas on how to fix this issue?

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/-quw1tgZyhQJ.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

No comments:

Post a Comment