0

在运行 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

问题:如果我在星期六,我需要得到即将到来的“星期一”的日期。但是,如果我在星期二,我需要得到“星期三”的日期。当我完成任务后,它将每天运行以获取此信息。

4

4 回答 4

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)>
于 2013-10-15T17:47:45.090 回答
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      
于 2013-10-15T17:37:41.223 回答
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
于 2013-10-15T17:50:23.643 回答
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(工作日索引)与我们正在寻找的一个工作日匹配时,我们处理最多返回一周的日期。

于 2013-10-15T17:58:40.000 回答