在ruby中跳过日期
我正在创建一个程序,该程序将简化向用户发送电子邮件的任务,但是我需要找出一种方法,跳过周六和周日,在我们等待处理的电子邮件过程中,用户有6天的时间回复,因此,我需要的是一种方法,让Ruby的在ruby中跳过日期,ruby,date,Ruby,Date,我正在创建一个程序,该程序将简化向用户发送电子邮件的任务,但是我需要找出一种方法,跳过周六和周日,在我们等待处理的电子邮件过程中,用户有6天的时间回复,因此,我需要的是一种方法,让Ruby的Date课程跳过周六和周日,并准确计算不包括周末在内的6天 例如: require 'date' date = Date.today #=> #<Date: 2016-05-06 ((2457515j,0s,0n),+0s,2299161j)> new_date = date + 6 #=
Date
课程跳过周六和周日,并准确计算不包括周末在内的6天
例如:
require 'date'
date = Date.today
#=> #<Date: 2016-05-06 ((2457515j,0s,0n),+0s,2299161j)>
new_date = date + 6
#=> #<Date: 2016-05-12 ((2457521j,0s,0n),+0s,2299161j)>
new_date.strftime('%A')
#=> "Thursday"
date.strftime('%A')
#=> "Friday"
需要“日期”
date=今天的日期
#=> #
新建日期=日期+6
#=> #
新的\u日期.strftime(“%A”)
#=>“星期四”
date.strftime(“%A”)
#=>“星期五”
显然,本例计算周六和周日,那么如何跳过这两天并保持计数准确?您可以使用两种方法和
>需要“日期”
=>正确
>>d=新日期(2016年5月3日)
=> #
>>星期六?
=>错误
>>星期天?
=>错误
>>a=d+6
=> #
>>星期六?
=>错误
>>d=今天的日期
=> #
>>a=d+1
=> #
>>星期六?
=>正确
以下是您对需求描述的Ruby直译:
require "date"
p today = Date.today
p (1..Float::INFINITY)
.lazy
.map { |offset| today + offset }
.reject { |date| date.saturday? || date.sunday? }
.drop(5)
.next
代码创建一个从明天开始的所有日期的惰性枚举,拒绝所有周六和周日,删除接下来的5个有效候选,然后返回下一个
输出:
#<Date: 2016-05-06 ((2457515j,0s,0n),+0s,2299161j)>
#<Date: 2016-05-16 ((2457525j,0s,0n),+0s,2299161j)>
#
#
快速浏览日历可以看出输出是正确的。您可以使用
日期#周六?
和日期#周日?
或者,你可以用gem为你处理这一切。根据您的需要进行配置后(例如,将“工作时间”设置为午夜-->午夜,如果您需要的话),您可以执行以下各种操作:
6.business_days.after(Date.new(2014, 02, 7))
6.business_days.from_now
依此类推。如果是
周六
或周日
,您可以使用date.strftime(“%A”)检查日期,然后使用if条件跳过任务。我会尝试一下。然而,这无助于保持计数的准确性?那是一块非常棒的宝石!谢谢你!我有点担心猴子修补核心类,比如数字类。这种宝石被广泛使用和信任吗?是的。应用非常广泛。但是,正如您可以想象的那样,您需要注意如何使用它。我所看到的最大的错误是人们编写不使用工作时间的单元测试——结果是测试“随机”失败。(实际上,在一天/一周/一个月的特定时间失败。)但这不是图书馆本身的问题;只是在使用的方式上。那很酷!我编写了一个脚本,将算法作为一种方法来实现,并打印出值来证明结果是正确的。它在。此外,上限不必如此之高;10为我工作。
6.business_days.after(Date.new(2014, 02, 7))
6.business_days.from_now