2015-06-16 74 views

回答

5

日期有step方法:

require 'date' 

d = Date.strptime("6-16-2015", '%m-%d-%Y') # strange date format 
end_year = Date.new(d.year, -1, -1) 
p d.step(end_year, 14).to_a 

# =>[#<Date: 2015-06-16 ((2457190j,0s,0n),+0s,2299161j)>, #<Date: 2015-06-30 ((2457204j,0s,0n),+0s,2299161j)>, ... 

# Going backward: 
begin_year = Date.new(d.year, 1, 1) 
p d.step(begin_year,-14).to_a 

# =>[#<Date: 2015-06-16 ((2457190j,0s,0n),+0s,2299161j)>, #<Date: 2015-06-02 ((2457176j,0s,0n),+0s,2299161j)>,... 
1

你能做到這一點,如下所示:

require 'date' 

date_str = "6-16-2015" 

d = Date.strptime(date_str, '%m-%d-%Y') 
f = Date.new(d.year) 
((f + (f-d).abs % 14)..Date.new(d.year,-1,-1)).step(14).to_a 
    #=> [#<Date: 2015-01-13 ((2457036j,0s,0n),+0s,2299161j)>, 
    # #<Date: 2015-01-27 ((2457050j,0s,0n),+0s,2299161j)>, 
    # ... 
    # #<Date: 2015-06-16 ((2457190j,0s,0n),+0s,2299161j)>, 
    # ... 
    # #<Date: 2015-12-29 ((2457386j,0s,0n),+0s,2299161j)>] 

根據您的問題的第二句話,我以爲你只是想所有日期的數組在給定的一年中,相隔兩週,包括給定的一天。

1

更具描述,容易理解的解決方案:

require 'date' 
    current_date = Date.parse "16-june-15" 
    start_date = Date.parse '1-jan-15' 
    end_date = Date.parse '31-dec-15' 
    interval = 14 
    result = current_date.step(start_date, -interval).to_a 
    result.sort!.pop 
    result += current_date.step(end_date, interval).to_a 
0

我嘗試一個mathy模量偏壓的辦法,變成了出乎意料混亂。

require 'date' 

a_recycle_date_string = "6-17-2015" 
interval = 14 

a_recycle_date = Date.strptime(a_recycle_date_string, '%m-%d-%Y') 
current_year = a_recycle_date.year 
end_of_year = Date.new(current_year, -1, -1) 

# Find out which index of the first interval's days is the first recycle day 
# of the year the (1 indexed) 
remainder = (a_recycle_date.yday) % interval 
# => 0 

# make sure remainder 0 is treated as interval-1 so it doesn't louse 
# the equation up 
n_days_from_first_recycling_yday_of_year = (remainder - 1) % interval 


first_recycle_date_this_year = Date.new(current_year, 
             1, 
             1 + n_days_from_first_recycling_yday_of_year) 

first_recycle_date_this_year.step(end_of_year, interval).to_a 
相關問題