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