我正在创建一个程序,它将使向用户发送电子邮件的任务变得更容易,但是我需要找出一种跳过周六和周日的方法,在我们待处理的电子邮件过程中,给用户6天的回复时间,因此我需要的是让Ruby的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"
显然,此示例计算周六和周日,因此如何跳过这两天并保持计数准确?
这是您对需求的描述到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)>
快速浏览一下日历,可以看到输出正确。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句