WorkDay

Gem para verificação de dias úteis e cálculo entre datas úteis.

Installation

Add this line to your application's Gemfile:

gem 'work_day'

And then execute:

$ bundle

Or install it yourself as:

$ gem install work_day

Usage

WorkDay.work_day?(date)

Verifica se uma data é um dia útil

> WorkDay.work_day?("2017-01-01")
=> false
> WorkDay.work_day?("2017-01-05")
=> true

WorkDay.last_until(date, days = 0)

Retorna o n-dia útil até certa data.

Passando uma data útil, com 0 dias
> WorkDay.last_until("2017-01-05")
=> Thu, 05 Jan 2017 # retorna a própria data por ser uma data útil
Passando uma data não-útil, com 0 dias
> WorkDay.last_until("2017-01-08")
=> Fri, 06 Jan 2017 # retorna o primeiro dia útil anterior a data passada
Passando uma data útil, com 2 dias
> WorkDay.last_until("2017-01-05", 2)
=> Tue, 03 Jan 2017 # retorna a data 2 dias úteis anteriores a data passada
Passando uma data não-útil, com 2 dias
> WorkDay.last_until("2017-01-08", 2)
=> Wed, 04 Jan 2017 # retorna a data 2 dias úteis anteriores a data passada

WorkDay.next_after(date, days = 1)

Retorna o n-dia útil após certa data

Passando uma data útil, com 2 dias
> WorkDay.next_after("2017-01-05", 2)
=> Mon, 09 Jan 2017
Passando uma data não-útil, com 2 dias
> WorkDay.next_after("2017-01-07", 2)
=> Tue, 10 Jan 2017
Passando uma data útil, com 1 dia
> WorkDay.next_after("2017-01-05")
=> Fri, 06 Jan 2017
Passando uma data não-útil, com 1 dia
> WorkDay.next_after("2017-01-07")
=> Mon, 09 Jan 2017

WorkDay.between(start_date, end_date)

Lista todas as datas úteis entre 2 datas (start_date e end_date)

> WorkDay.between("2013-01-05", "2013-01-10")
=> [Mon, 07 Jan 2013,
Tue, 08 Jan 2013,
Wed, 09 Jan 2013,
Thu, 10 Jan 2013]

Escolhendo calendários

Pode ser utilizado mais de um calendário ao mesmo tempo, através de qualquer um dos nomes disponíveis:

  • london: london, londres
  • new_york: new_york, nova_iorque
  • brazil: brazil, brasil, anbima
  • sinacor: sinacor, b3, sao_paulo
Configurando os calendários default
> WorkDay.calendars(['london', 'new_york'])
> WorkDay.work_day?("2018-05-28")
=> false
Usando calendários apenas em um bloco específico (ex.: por request)
> WorkDay.calendars(['new_york'])
> WorkDay.work_day?("2018-07-04")
=> false
> WorkDay.use_calendars('london') { WorkDay.work_day?("2018-07-04") }
=> true

License

The gem is available as open source under the terms of the MIT License.