2012-09-22 15 views
13

उदाहरण मेरे पास है के आधार पर महीने की एक सरणी बनाने का तरीका रेल।तिथियों की सीमा

मैं इस श्रेणी के आधार पर एक महीने सरणी कैसे बना सकता हूं?

उदाहरण:

मैं तारीखों 23/1/2012 और 15/3/2012

महीने हैं जनवरी, फरवरी और मार्ट की है।

मैं की तरह ["1/1/2012", "1/2/2012", "1/3/2012"]

एक सरणी प्राप्त करना चाहते हैं और अगर सीमा 10/10/2012

को 25/6/2012 के बीच किया गया था सरणी होगा: ["1/6/2012", "1/7/2012", "1/8/2012", "1/9/2012", "1/10/2012"]

+0

... 1 महीने का एक चरण अंतराल मानते हैं? –

+0

यहां एक नज़र डालें: http://stackoverflow.com/questions/5887756/rails-calculate-date-range-in-months –

+0

मैंने अभी उदाहरण के साथ अपने qustion को अद्यतन किया है। –

उत्तर

28
require 'date' 

date_from = Date.parse('2011-10-14') 
date_to = Date.parse('2012-04-30') 
date_range = date_from..date_to 

date_months = date_range.map {|d| Date.new(d.year, d.month, 1) }.uniq 
date_months.map {|d| d.strftime "%d/%m/%Y" } 
# => ["01/10/2011", "01/11/2011", "01/12/2011", "01/01/2012", 
#  "01/02/2012", "01/03/2012", "01/04/2012"] 
6

रेल ActiveSupport कोर एक्सटेंशन में तिथि के लिए एक विधि शामिल है: start_of_month। आपका समारोह इस प्रकार लिखा जा सकता है:

def beginning_of_month_date_list(start, finish) 
    (start.to_date..finish.to_date).map(&:beginning_of_month).uniq.map(&:to_s) 
end 

चेतावनियां: इस और अधिक कुशलता से लिखा जा सकता है, शुरू और खत्म की उम्मीद क्रम में हैं मान लिया गया है, लेकिन अन्यथा आप महीने आप देख रहे हैं देना चाहिए। अपेक्षित महीने प्रारूप प्राप्त करने के लिए आप #to_s विधि के प्रारूप प्रतीक को पास करने के लिए फिर से लिख सकते हैं।

+0

मैंने भाग्य के बिना यह कोशिश की है। मुझे इसे अपने लूप के लिए उपयोग करने की ज़रूरत है, यहां और देखें: http://stackoverflow.com/questions/12544533/rails-how-to-create-chart-data-for-each-month-between-2-dates –

+0

यह आपको जो परिणाम मिल रहा है उसे देखने में मदद मिलेगी। – rossta

+0

मैंने परिणाम के साथ प्रश्न अद्यतन किया है। –

संबंधित मुद्दे