Пересечение между двумя интервалами дат - PullRequest
0 голосов
/ 01 февраля 2011

у меня есть четыре даты:

Первые две - начало и конец месяца

start_m = Time.new(2010,1).beginning_of_month
end_m = Time.new(2010,1).end_of_month

и последние две, d1 и d2, с d1 <= d2

То, что я хочу, - это массив, содержащий номера дней, которые идут от пересечения start_m -> end_m и d1 -> d2

, например:

start_m = 2011-01-01
end_m = 2011-01-31
d1 = 2010-12-20
d2 = 2011-01-11

результат будет

[1,2,3 ... 11]

Есть ли простой способ сделать это пересечение?

Ответы [ 2 ]

5 голосов
/ 01 февраля 2011
require 'date'

start_m = Date.parse('2011-01-01')
end_m = Date.parse('2011-01-31')
d1 = Date.parse('2010-12-20')
d2 = Date.parse('2011-01-11')

puts (start_m..end_m).to_a & (d1..d2).to_a

См. Документацию по Array # & . Выход:

2011-01-01
2011-01-02
2011-01-03
2011-01-04
2011-01-05
2011-01-06
2011-01-07
2011-01-08
2011-01-09
2011-01-10
2011-01-11
1 голос
/ 01 февраля 2011

Мой подход состоит в том, чтобы использовать функцию range.step из ruby, используя (start_m.to_i..end_m.to_i).step(60*60*24).to_a.

Тогда вам нужно будет преобразовать каждый элемент массива, используя Time.at(element).day

для обоих массивов вы можете сделать array1 & array2, который даст вам желаемый результат.

Это всего лишь предположение, возможно, есть более эффективные способы сделать это.

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