我需要在运行def之前定义哪个先出现。我必须耙一个文件并设置下周的日期,但该日期可能是星期一或星期三。到目前为止我已经知道了,但不知道如何判断在哪个日期使用。我需要使用最先出现的日期。
require 'date'
def date_of_next(day1, day2)
day = day1
date = Date.parse(day)
delta = date >= Date.today ? 0 : 7
date + delta
end
hello = date_of_next("Monday", "Wednesday")
puts hello
问题:如果我在星期六,我需要得到即将到来的“星期一”的日期。但是,如果我在星期二,我需要得到“星期三”的日期。当我完成任务时,它将每天运行获取此信息。
答案 0 :(得分:1)
您的代码基于https://stackoverflow.com/a/7930553/477037:
def date_of_next(day)
date = Date.parse(day)
delta = date > Date.today ? 0 : 7
date + delta
end
上述方法返回一天的日期。要查找多天的第一个日期,请每天调用它并找到第一个日期(通过对日期进行排序):
def first_date_of_next(*days)
days.map { |day| date_of_next(day) }.sort.first
end
first_date_of_next("Monday", "Wednesday")
#=> #<Date: 2013-10-16 ((2456582j,0s,0n),+0s,2299161j)>
答案 1 :(得分:0)
这会满足您的要求吗?
require 'Date'
def date_of_next(early_dow, late_dow)
early_date = Date.parse(early_dow)
late_date = Date.parse(late_dow)
today = Date.today
if today <= early_date
early_date
elsif today <= late_date
late_date
else
early_date + 7
end
end
答案 2 :(得分:0)
require 'date'
def date_of_next(d)
Date.today.step(Date.today + 7).select{ |i| puts i if i.strftime("%A") == "#{d}" && i > Date.today}
end
答案 3 :(得分:0)
这个怎么样?
require 'Date'
def date_of_next(*day_names)
weekdays = day_names.map{|dayname| Date::DAYNAMES.index(day_name) }
Range.new(Date.today, Date.today+6).detect{|day| weekdays.include? day.wday }
end
这里我们将输入全局化,允许您检测一个或多个工作日名称。第一行在Date :: DAYNAMES数组中查找工作日名称的索引。在第二行,我们处理一周的第一天返回的日期.wday(工作日索引)与我们正在寻找的工作日之一相匹配。