Как создать даты определенного месяца - PullRequest
1 голос
/ 05 ноября 2019

Я хочу сгенерировать все даты определенного месяца, начиная с 1-го числа этого месяца до 30-го или 31-го числа этого месяца без использования тривиального цикла for:

for i in 1..Time.days_in_month(Date.today.month, Date.today.year)
  date = Date.new(y, m, i)
end

Я былполучать такие даты, но я не должен использовать этот тривиальный цикл for.

Ответы [ 2 ]

7 голосов
/ 05 ноября 2019

Хотя есть довольно много способов, которыми вы могли бы сделать это, одним из способов было бы использовать Ruby Range в сочетании с Time#beginning_of_month и Time#end_of_month методов для генерации объекта, который содержит все дни месяца, и последующего преобразования его в массив:

(Date.today.beginning_of_month..Date.today.end_of_month).to_a
=> [Fri, 01 Nov 2019, Sat, 02 Nov 2019, Sun, 03 Nov 2019, Mon, 04 Nov 2019, Tue, 05 Nov 2019, Wed, 06 Nov 2019, ...., Fri, 29 Nov 2019, Sat, 30 Nov 2019]

Другим вариантом будет использование Time#all_month помощник, который так просто, как:

Date.today.all_month.to_a
=> [Fri, 01 Nov 2019, Sat, 02 Nov 2019, Sun, 03 Nov 2019, Mon, 04 Nov 2019, Tue, 05 Nov 2019, Wed, 06 Nov 2019, ...., Fri, 29 Nov 2019, Sat, 30 Nov 2019]
2 голосов
/ 05 ноября 2019

(Обычный Рубин) Класс Date использует отрицательные числа как способ подсчета с конца (как в Массивах):

require "date"

today = Date.today
m, y  = today.month, today.year
p (Date.new(y,m,1) .. Date.new(y,m,-1)).to_a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...