Как выбрать следующий 10-й месяц в рубине - PullRequest
0 голосов
/ 08 октября 2018

У меня проблема с вычислением даты, которая путает мою логику.

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

Мне нужно забрать следующий десятый день месяца, который может быть текущим или следующим месяцем, в зависимости от текущего дня.

Например, сегодня7 октября мне нужно получить на следующий день 10, поскольку начиная с сегодняшнего дня с интервалом в три дня, в этом случае мне нужно вернуться 10 октября.

Но если сегодня 8 октября, мне нужнозабрать следующие 10, и в этом случае мне нужно будет вернуть 10 ноября.

Как лучше всего это сделать в Ruby?

Ответы [ 3 ]

0 голосов
/ 08 октября 2018

Вы можете использовать что-то вроде этого:

def next_10th(date)
  year, month, day = date.year, date.month, date.day

  month += 1 if day > 7
  year += 1 if month > 12

  Date.new(year, (month - 1) % 12 + 1, 10)
end

next_10th(Date.new(2017, 11, 7)).to_s
#=> "2017-11-10"

next_10th(Date.new(2017, 11, 8)).to_s
#=> "2017-12-10"

next_10th(Date.new(2017, 11, 10)).to_s
#=> "2017-12-10"

next_10th(Date.new(2017, 12, 8)).to_s
#=> "2018-01-10"
0 голосов
/ 08 октября 2018

Другой вариант:

def next_10th_deadline_from date
  deadline = Date.new(date.year, date.month, 10)
  deadline = deadline.next_month if (deadline - date) < 3
  deadline
end


Или, если входная строка и строка вывода:
def next_10th_deadline_from date
  date = Date.parse date
  deadline = Date.new(date.year, date.month, 10)
  deadline = deadline.next_month if (deadline - date) < 3
  deadline.to_s
end

next_10th_deadline_from '2018-12-07' #=> "2018-12-10"
next_10th_deadline_from '2018-12-08' #=> "2019-01-10"

Для работы require 'date'

0 голосов
/ 08 октября 2018

Вы можете использовать ленивый перечислитель в ruby, чтобы найти следующий действительный день, начиная с сегодняшнего дня.

(Date.today..Date::Infinity.new)
  .lazy
  .find { |date| date.day == 7 }
  .next_day(3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...