2016-04-10 9 views
2

Этот день недели (скажем, понедельник), мне нужно найти ближайшую дату (в будущем) до указанной даты (например, 9-4-2016), которая этот день в неделю (для этих примеров это должно быть 11-4-2016).Дата, день и день, в ближайшую дату

ответ

4

Это чистое решение рубина.

require 'date' 

d = Date.strptime('9-4-2016', '%d-%m-%Y') 
    #=> #<Date: 2016-04-09 ((2457488j,0s,0n),+0s,2299161j)> 
d + (1 - d.wday) % 7 
    #=> #<Date: 2016-04-11 ((2457490j,0s,0n),+0s,2299161j)> 

1 - смещение понедельника. d.wday #=> 6.

Я предположил, что если дата выпадает на понедельник, «ближайший» понедельник - в тот же день. Если это будет следующий понедельник, используйте:

d + (d.wday == 1) ? 7 : (1 - d.wday) % 7 
3

Вы можете найти эту дату в ближайшей неделе вашего date:

date = Date.parse('9-4-2016') 
(date..date + 6).find {|d| d.strftime("%A") == "Monday"} 
#=> Mon, 11 Apr 2016 
+0

Вы действительно должны использовать 'strptime', поскольку' 9' может быть днем ​​или месяцем. Кроме того, я предлагаю вам включить 'require 'date''. –

+0

@CarySwoveland, это вопрос о Rails (в соответствии с тегами), поэтому нет необходимости его требовать. – Ilya