9
A
回答
0
我想出了这个解决方案产生范围内的所有[年月]元组的列表:
first=[2012,10]
last=[2013,03]
(first[0]..last[0]).to_a.product((1..12).to_a).select{|ym|(first..last).cover?(ym)}
=> [[2012, 10], [2012, 11], [2012, 12], [2013, 1], [2013, 2], [2013, 3]]
+0
这很不错,但不会很好地延伸到几天,因为几个月并不都具有几年的几天相同的天数。 – dbenhur 2013-03-21 20:53:09
1
require 'date'
Time.new(2011).to_date.upto(Time.now.to_date) do |a|
puts ""+a.day.to_s+","+a.month.to_s+","+a.year.to_s
end
或者让你的月/年的元组:
require 'date'
result = []
Time.new(2002).to_date.upto(Time.now.to_date) do |a|
result << [a.month,a.year]
end
result.uniq!
使用从日期开始的upto方法:http://ruby-doc.org/stdlib-2.0/libdoc/date/rdoc/Date.html#method-i-upto
2
红宝石Date
支持生产连续几天,并提供一个next_month
方法,可用于有效地迭代数月。
下面是适应你的输入精度的一般方法:
require 'date'
def date_tuples(from,to)
prec = from.size
start = Date.new(*from)
finish = Date.new(*to)
filter_on = [:day,:mon].first(3-prec)
filter = ->(d) { filter_on.all? {|attr| d.send(attr) == 1 } }
(start..finish)
.select(&filter)
.map { |d| [d.year,d.mon,d.day].first(prec) }
end
[7] pry(main)> date_tuples([2012],[2015])
=> [[2012], [2013], [2014], [2015]]
[8] pry(main)> date_tuples([2012,10],[2013,3])
=> [[2012, 10], [2012, 11], [2012, 12], [2013, 1], [2013, 2], [2013, 3]]
[9] pry(main)> date_tuples([2012,10,25],[2012,11,6])
=> [[2012, 10, 25],
[2012, 10, 26],
[2012, 10, 27],
[2012, 10, 28],
[2012, 10, 29],
[2012, 10, 30],
[2012, 10, 31],
[2012, 11, 1],
[2012, 11, 2],
[2012, 11, 3],
[2012, 11, 4],
[2012, 11, 5],
[2012, 11, 6]]
25
例如:
((Date.today - 90)..Date.today).map{|d| [d.year, d.month]}.uniq
#=> [[2012, 12], [2013, 1], [2013, 2], [2013, 3]]
0
这里是一个方式,我写来解决这个问题。 这是专为处理哈希数据,如: {太阳,2012年1月1日=> 58,2012年3月1日星期三=> 0,星期四,2012年3月01日=> 0} 但可以很容易地修改阵列数据。
参见:https://github.com/StephenOTT/add_missing_dates_ruby这里我提供了一个工作代码示例
但是代码的关键部分是:
def addMissingMonths (datesHash)
count = 0
result = {}
datesHash.keys.each do |x|
if x != datesHash.keys.last
(x+1.month).upto(datesHash.keys[count+1]-1.month) do |a|
result[a.at_beginning_of_month] = 0
end
end
count += 1
end
return result.merge!(datesHash)
end
的关键内容,在就是看:(x+1.month).upto(datesHash.keys[count+1]-1.month)
相关问题
- 1. 红宝石 - 获取两个日期之间的月份范围
- 2. 红宝石创建范围
- 3. 检查两个范围的红宝石
- 4. 红宝石/导轨的日期范围
- 5. 红宝石 - 日期范围(从第一本月底至下月一日)
- 6. 范围根据日期不在一个月内不起作用(红宝石)
- 7. 两个日期参数之间的红宝石查询
- 8. 红宝石从日期范围
- 9. 按月获取日期的范围之间的日期范围
- 10. 计算(日期)范围内的两个数组的交集红宝石
- 11. 从日期对象获得日期范围的红宝石
- 12. 日期范围落在一个LINQ查询中的两个日期之间
- 13. 在两个日期之间创建一个日期表
- 14. 如何在红宝石轨道中搜索两个日期之间的搜索?
- 15. Ruby Noob?创建一个红宝石日期
- 16. 在PostgreSQL的两个日期之间为每个月创建一行
- 17. Python过滤一个日期范围内的DBF(两个日期之间)
- 18. 在日期范围之间查找特定月份的日期
- 19. 两个日期之间的月数SAS
- 20. 两个日期之间的月数
- 21. 红宝石下个月的第一个营业日
- 22. C#得到两个日期时间范围之间的时间
- 23. 日期时间列落在两个时间范围之间
- 24. 红宝石日期
- 25. 红宝石阵列范围
- 26. 红宝石范围部分
- 27. 红宝石 - 块范围
- 28. 红宝石串范围
- 29. 使用范围 - 红宝石
- 30. 红宝石范围/绑定
对于它的价值,如果您有权访问项目中的'ActiveSupport''Range'可以简单地扩展为支持具有时区支持的变量步长(请参阅http://stackoverflow.com/questions/19093487/ruby-create-range-of -dates/19094504#答案-19094504)。 – captainpete 2013-11-01 00:52:35