Как сделать цикл численно + месяц и день за последние X лет? - PullRequest
4 голосов
/ 12 февраля 2012

Мне нужно численно просмотреть все дни и месяцы за последние пару десятилетий, а также указать название месяца и дня для каждой даты.Очевидно, что несколько последовательных циклов могут выполнить это, но я хотел бы знать самый краткий рубиноподобный способ сделать это.

По сути, мне понадобится вывод, подобный этому, для каждого дня за последние X лет:1003 *

3 января 2011 года и 1/3/2011

Какой самый чистый подход?

Ответы [ 3 ]

18 голосов
/ 12 февраля 2012

Даты могут работать как диапазон, так что довольно легко выполнять итерации по диапазону.Единственный реальный трюк - как вывести их в виде отформатированной строки, которую можно найти в методе Date#strftime, который задокументирован здесь .

from_date = Date.new(2011, 1, 1)
to_date   = Date.new(2011, 1, 10)

(from_date..to_date).each { |d| puts d.strftime("%-d %B %Y and %-m/%-d/%Y") }

# => 1 January 2011 and 1/1/2011
# => 2 January 2011 and 1/2/2011
# => ...
# => 9 January 2011 and 1/9/2011
# => 10 January 2011 and 1/10/2011

( Примечание.: Я вспоминаю, как мне не повезло, когда я возвращался с неадмированными процентными форматами, такими как %-d в Windows, но если вышеприведенное не работает, и вы хотите, чтобы они не дополнялись в этой среде, вы можете удалить черту и применить свои собственные обходные пути..)

4 голосов
/ 12 февраля 2012

Учитывая start_date & end_date:

(start_date..end_date).each do |date|
  # do things with date
end

, как сказал Дэвид , это возможно из-за Date # succ Вы можете использовать Date#strftime, чтобы получить дату в любом формате.

2 голосов
/ 12 февраля 2012

Посмотрите, можете ли вы создать Range, где min и max являются объектами Date, затем вызовите .each для диапазонаЕсли объект Date поддерживает метод succ, это должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...