我试图在两个日期之间每N天步一次。我尝试了下面的代码但是没有用,因为startDate和endDate是ActiveSupport :: TimeWithZone对象而不是像我想的那样的DateTime对象。
startDate.step(endDate, step=7) { |d| puts d.to_s}
min.step(max, step=stepInt){ |d|
puts d.to_s
}
如何将TimeWithZone对象转换为DateTime?
答案 0 :(得分:31)
我认为在我最近搜索这个答案时更新这个答案可能会有用。实现此转换的最简单方法是使用.to_datetime()函数。
e.g。
5.hours.from_now.class # => ActiveSupport::TimeWithZone
5.hours.from_now.to_datetime.class # => DateTime
参考:http://api.rubyonrails.org/classes/ActiveSupport/TimeWithZone.html#method-i-to_datetime
答案 1 :(得分:15)
DateTime
是您通常希望避免使用的旧类。 Time
和Date
是您要使用的两个。 ActiveSupport::TimeWithZone
的行为类似Time
。
对于踩过日期,您可能想要处理Date
个对象。您可以使用Time
将ActiveSupport::TimeWithZone
(或Date
)转换为Time#to_date
:
from.to_date.step(to.to_date, 7) { |d| puts d.to_s }