You're missing a simple fact. Time is universal. 1:00pm in UTC is 1:00pm in UTC anywhere. You don't even need to store a time_zone with every event. You just need to let admins select it for easier time input. As far as backend, it's always in UTC. You can certainly input time from different timezone, and output into different timezone, but it's still the same "1:00pm in London" no matter how you twist it. So when a user is looking at events, you can simply do event_date < Time.now.utc (all past events).
However, if the observing user is actually in a different timezone from the events, and you want to display event dates in the user's home timezone, then you can let user select their home timezone, and store it in users table. Then in before_filter
on your ApplicationController
you can just do:
class ApplicationController < ActionController::Base
before_filter :set_time_zone
private
def set_time_zone
Time.zone = current_user.time_zone if current_user
end
end
Then every Time value that comes from database (such as event.date) will be automatically converted in the user's home time zone.
Or maybe I misunderstood the question. : ) Let me know.