2014-10-17 2 views
2

Я хочу получить последний день месяца, используя драгоценный камень business_time.Как получить последний рабочий день месяца с драгоценным камнем `business_time`

Этот код работает, если первый день месяца является рабочим днем.

1.business_day.before(Date.parse("2014-12-01")) 

Но если первый день не рабочий день, он возвращается на день раньше, как это:

1.business_day.before(Date.parse("2014-11-01")) # => 2014-10-30 (It should be 2014-10-31) 

Как я могу получить последний рабочий день месяца на рубин? При необходимости я буду использовать другой драгоценный камень.

ответ

1

Вам не нужно драгоценный камень, на самом деле

require 'time' 

def last_business_day date 
    day = Date.parse(date).next_month 
    loop do 
    day = day.prev_day 
    break unless day.saturday? or day.sunday? 
    end 
    day 
end 

last_business_day '2014-11-01' # => '2014-11-28' 
last_business_day '2014-12-01' # => '2014-12-31' 
2

попробовать это:

установить камень week_of_month

В IRB попробовать:

require 'week_of_month' 

    date = Date.parse("2014-11-01") 

    date.end_of_month.downto(date).find{|day| day.working_day? } 
    => #<Date: 2014-11-28 ((2456990j,0s,0n),+0s,2299161j)> 
+0

Без 'week_of_month', просто замените' 'day.working_day на' day.wday.in? 1..5' – Habax

0

рода измененная версия ответа Сачина, в которой используется праздничный камень, чтобы учесть U S праздники.

# lib/holidays/business_day_helpers.rb 
require 'holidays' 

module Holidays 
    module BusinessDayHelpers 
    def business_day?(calendar = :federal_reserve) 
     !holiday?(calendar) && !saturday? && !sunday? 
    end 

    def last_business_day_of_the_month(calendar = :federal_reserve) 
     end_of_month.downto(beginning_of_month).find(&:business_day?) 
    end 

    def last_business_day_of_the_week(calendar = :federal_reserve) 
     end_of_week.downto(beginning_of_week).find(&:business_day?) 
    end 
    end 
end 

Date.include Holidays::BusinessDayHelpers 
0

Это, как я сделал это с business_time самоцвета:

Time.previous_business_day(Date.parse("2014-12-01") - 1.day) 
Смежные вопросы