2010-04-20 54 views
0

我需要獲取給定年份的確切開始和結束日期(月,日和年)。如何獲得特定年份的每個季度的確切開始日期和結束日期在Ruby中

例如,2008年 2008年1月1日 月,30,2008年

如何做到這一點有什麼想法?

array = [2007, 2008, 2009, 2010] 

array.each do |a| 

    #code to get array of date for a (year) 
end 
+3

我可能會感覺有點密集在這裏,但我不認爲宿舍的開始和結束日期多年之間改變這一點。或者你指的是本季度的第一個也是最後一個營業日,這完全是一個完全不同的魚類水壺? – 2010-04-20 11:07:49

+0

是的。你是對的,但我只想得到一組日期。 – kgpdeveloper 2010-04-20 23:22:51

回答

3

下面的事情是,如果你想變得瘋狂更紅寶石方式

array = [2007, 2008, 2009, 2010] 
quarters = [] 
array.each do |a| 
    @date = Date.parse("1.1.#{a}") unless @date 
    4.times do 
    quarters << [@date.beginning_of_quarter, @date.end_of_quarter] 
    @date = @date.end_of_quarter+1.day 
    end 
end 
+0

哦,我忘記了AS助手'beginning_of_quarter'和'end_of_quarter' =)。 '@date || = Date.parse(「1.1。#{a}」)會更好 – fl00r 2010-04-20 11:58:33

+0

真棒:)謝謝謝謝... – kgpdeveloper 2010-04-20 22:06:04

1
array = [2007, 2008, 2009, 2010] 
quarters = [] 
array.each do |a| 
    date = Date.parse("1.1.#{a}") 
    4.times do 
    quarters << [date, date+3.month-1.day] 
    date += 3.month 
    end 
end 
quarters 

#=> [[Mon, 01 Jan 2007, Sat, 31 Mar 2007], [Sun, 01 Apr 2007, Sat, 30 Jun 2007], [Sun, 01 Jul 2007, Sun, 30 Sep 2007], [Mon, 01 Oct 2007, Mon, 31 Dec 2007], [Tue, 01 Jan 2008, Mon, 31 Mar 2008], [Tue, 01 Apr 2008, Mon, 30 Jun 2008], [Tue, 01 Jul 2008, Tue, 30 Sep 2008], [Wed, 01 Oct 2008, Wed, 31 Dec 2008], [Thu, 01 Jan 2009, Tue, 31 Mar 2009], [Wed, 01 Apr 2009, Tue, 30 Jun 2009], [Wed, 01 Jul 2009, Wed, 30 Sep 2009], [Thu, 01 Oct 2009, Thu, 31 Dec 2009], [Fri, 01 Jan 2010, Wed, 31 Mar 2010], [Thu, 01 Apr 2010, Wed, 30 Jun 2010], [Thu, 01 Jul 2010, Thu, 30 Sep 2010], [Fri, 01 Oct 2010, Fri, 31 Dec 2010]] 
1

,做這一切在同一行

[2007, 2008, 2009, 2010].inject([]){|quarters, year| quarters += [1, 4, 7, 10].collect{|month| [Time.parse("#{month}/01/#{year}").beginning_of_quarter, Time.parse("#{month}/01/#{year}").end_of_quarter]}.flatten} 

不是超級表現,但涼爽行使!我< 3注入

回報:

[Mon Jan 01 00:00:00 -0500 2007, Sat Mar 31 23:59:59 -0400 2007, Sun Apr 01 00:00:00 -0400 2007, Sat Jun 30 23:59:59 -0400 2007, Sun Jul 01 00:00:00 -0400 2007, Sun Sep 30 23:59:59 -0400 2007, Mon Oct 01 00:00:00 -0400 2007, Mon Dec 31 23:59:59 -0500 2007, Tue Jan 01 00:00:00 -0500 2008, Mon Mar 31 23:59:59 -0400 2008, Tue Apr 01 00:00:00 -0400 2008, Mon Jun 30 23:59:59 -0400 2008, Tue Jul 01 00:00:00 -0400 2008, Tue Sep 30 23:59:59 -0400 2008, Wed Oct 01 00:00:00 -0400 2008, Wed Dec 31 23:59:59 -0500 2008, Thu Jan 01 00:00:00 -0500 2009, Tue Mar 31 23:59:59 -0400 2009, Wed Apr 01 00:00:00 -0400 2009, Tue Jun 30 23:59:59 -0400 2009, Wed Jul 01 00:00:00 -0400 2009, Wed Sep 30 23:59:59 -0400 2009, Thu Oct 01 00:00:00 -0400 2009, Thu Dec 31 23:59:59 -0500 2009, Fri Jan 01 00:00:00 -0500 2010, Wed Mar 31 23:59:59 -0400 2010, Thu Apr 01 00:00:00 -0400 2010, Wed Jun 30 23:59:59 -0400 2010, Thu Jul 01 00:00:00 -0400 2010, Thu Sep 30 23:59:59 -0400 2010, Fri Oct 01 00:00:00 -0400 2010, Fri Dec 31 23:59:59 -0500 2010] 
+0

是的..這也不錯..我不介意一條長長的路線。 – kgpdeveloper 2010-04-20 22:16:28

1

一個通用的一個:

def get_dates(year, quarter) 
    date = Date.new(year, quarter * 3) 

    [date.beginning_of_quarter, date.end_of_quarter] 
end 
相關問題