ruby - 创建日期序列
访问量: 1730
参考: https://stackoverflow.com/questions/19093487/ruby-create-range-of-dates
require 'active_support/all' class RailsDateRange < Range # step is similar to DateTime#advance argument def every(step, &block) c_time = self.begin.to_datetime finish_time = self.end.to_datetime foo_compare = self.exclude_end? ? :< : :<= arr = [] while c_time.send( foo_compare, finish_time) do arr << c_time c_time = c_time.advance(step) end return arr end end # Convenience method def RailsDateRange(range) RailsDateRange.new(range.begin, range.end, range.exclude_end?) end
使用:
By hour RailsDateRange((4.years.ago)..Time.now).every(years: 1) => [Tue, 13 Oct 2009 11:30:07 -0400, Wed, 13 Oct 2010 11:30:07 -0400, Thu, 13 Oct 2011 11:30:07 -0400, Sat, 13 Oct 2012 11:30:07 -0400, Sun, 13 Oct 2013 11:30:07 -0400] DateRange((4.years.ago)..Time.now).every(1.year) => [2009-10-13 11:30:07 -0400, 2010-10-13 17:30:07 -0400, 2011-10-13 23:30:07 -0400, 2012-10-13 05:30:07 -0400, 2013-10-13 11:30:07 -0400]
hour, day都是一个用法