Этот день недели (скажем, понедельник), мне нужно найти ближайшую дату (в будущем) до указанной даты (например, 9-4-2016), которая этот день в неделю (для этих примеров это должно быть 11-4-2016).Дата, день и день, в ближайшую дату
2
A
ответ
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
Вы действительно должны использовать 'strptime', поскольку' 9' может быть днем или месяцем. Кроме того, я предлагаю вам включить 'require 'date''. –
@CarySwoveland, это вопрос о Rails (в соответствии с тегами), поэтому нет необходимости его требовать. – Ilya