2014-09-09 2 views
-1

Я хочу создать массив дат, используя код нижеInvalid ошибка даты при разборе

arr = [] 
for i in (1..31) do 
    arr << Date.new(2014, 9, i) 
end 

Я получаю сообщение об ошибке «Invalid даты». Есть ли способ разрешить это?

+4

сентября в течение 30 дней, а не 31 – Stefan

+0

@mode_x: измените эту строку 'for i in (1..31) do' to' for i in (1 ... 31) do' – anusha

ответ

6

Есть ли способ решить эту проблему?

Вы могли бы заменить 31 с 30, но есть еще один способ ссылки на последний день. Многие Date методы принимают отрицательные аргументы считать в обратном порядке:

first_day = Date.new(2014, 9, 1) #=> #<Date: 2014-09-01 ((2456902j,0s,0n),+0s,2299161j)> 
last_day = Date.new(2014, 9, -1) #=> #<Date: 2014-09-30 ((2456931j,0s,0n),+0s,2299161j)> 

Вы можете использовать это, чтобы создать Range:

september_range = first_day..last_day 

Или Array:

september_days = (first_day..last_day).to_a 
+0

никогда не знал об отрицательном в 'Date. new() '. +1 для справки в последний день. –

+0

Обратите внимание также, что 'Date.new (2014, 9, -1) == Date.new (2014, 10, 1) -1 => true'. –

1

вы могли бы написать:

arr = (Date.new(2014,9,1)..Date.new(2014,9,30)).to_a 

или без выходных дней:

arr = (Date.new(2014,9)...Date.new(2014,10)).to_a 
Смежные вопросы