营业日期/假日处理

Dav*_*Kub 7 ruby date

我已经为C#发布了这个问题,但我可能会在Ruby中工作.所以我问的是关于Ruby的同样问题:

我正在寻找一个类似于Perl模块的Ruby类/库/模块,Date::Manip就业务/假日日期而言.在Perl中使用该模块,我可以传递一个日期并查明它是一个工作日(即周一至周五)还是假日.在配置文件中定义假期非常简单(请参阅参考资料Date::Manip::Holidays).您可以输入适用于每年的"固定"日期,例如:

12/25                           = Christmas
Run Code Online (Sandbox Code Playgroud)

或者每年的"动态"日期,如:

last Monday in May              = Memorial Day
Run Code Online (Sandbox Code Playgroud)

或者给定年份的"固定"日期,如:

5/22/2010                       = Bob's Wedding
Run Code Online (Sandbox Code Playgroud)

您还可以传递日期并返回下一个/上一个工作日(这不是周末而不是假期的任何一天).

有没有人知道Ruby世界中有类似的东西?

knu*_*nut 5

你可以使用holidays-gem. http://rubygems.org/gems/holidays

某些国家(和地区)假期已经预定义,您可以定义自己的假期定义.


dra*_*tun 2

宝石应该可以满足您的需要business_time

自述文件底部的示例是一个很好的起始示例:

require 'rubygems'
require 'active_support'
require 'business_time'

# We can adjust the start and end time of our business hours
BusinessTime::Config.beginning_of_workday = "8:30 am"
BusinessTime::Config.end_of_workday = "5:30 pm"

# and we can add holidays that don't count as business days
# July 5 in 2010 is a monday that the U.S. takes off because 
# our independence day falls on that Sunday.
three_day_weekend = Date.parse("July 5th, 2010")
BusinessTime::Config.holidays << three_day_weekend
friday_afternoon = Time.parse("July 2nd, 2010, 4:50 pm")
tuesday_morning = 1.business_hour.after(friday_afternoon)
Run Code Online (Sandbox Code Playgroud)

您可能需要gem来帮助您从配置文件构建假期日期。但是 YMMV 因为您上周一的示例可能无法在. Hackaround 是做这样的事情:chronic chronic

# last monday in May (2010)
Chronic.parse('last monday', :now => Time.parse('2010-06-01'))
Run Code Online (Sandbox Code Playgroud)

看看在其之上工作的gem,以找到添加重复事件的方法。tickle chronic

/I3az/