Можете ли вы взять входную строку вместо объекта? Если вы передаете объект DateTime, его счетчик немного интуитивно понятен, потому что время, которое представляет объект, не является фактическим временем, которое вы ищете. Это будет соответствовать моим ожиданиям, если вы передадите либо правильный, абсолютный DateTime, либо саму строку. Суть проблемы полностью решена ActiveSupport, которую я думаю вы используете, так как вы пометили этот вопрос с помощью Rails. Как это выглядит?
def range_for(input, tz=nil)
if tz.is_a?(String)
tz = ActiveSupport::TimeZone.new(tz)
else
tz = Time.zone
end
if input.acts_like?(:date) || input.acts_like?(:time)
d = input.in_time_zone(tz)
else
d = tz.parse(input)
end
return d.beginning_of_day..d.end_of_day
end
Посмотрите:
ruby-1.9.2-p0 > range_for('2011-01-15', 'Alaska')
=> Sat, 15 Jan 2011 00:00:00 AKST -09:00..Sat, 15 Jan 2011 23:59:59 AKST -09:00
ruby-1.9.2-p0 > range_for(Time.zone.now)
=> Mon, 10 Jan 2011 00:00:00 EST -05:00..Mon, 10 Jan 2011 23:59:59 EST -05:00
ruby-1.9.2-p0 > range_for('2011-01-15', 'EST')
=> Sat, 15 Jan 2011 00:00:00 EST -05:00..Sat, 15 Jan 2011 23:59:59 EST -05:00