【问题标题】:Finding which date comes first of the next week - Ruby on Rails查找下周的第一个日期 - Ruby on Rails
【发布时间】:2013-10-15 17:09:24
【问题描述】:

我需要在运行 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

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

【问题讨论】:

  • 虽然问题已经得到解答,但为了以后读者的利益,我认为这个问题需要澄清一下。我的理解是:星期从星期日开始。星期几 day1day2 之前(例如,day1 = '星期一',day2 = Wednesday)。如果今天的日期不晚于 day1 的日期,则返回 day1 的日期。如果今天的日期不晚于day2 的日期,则返回day2 的日期。否则返回day1 下周的日期。对吗?

标签: ruby-on-rails ruby date time


【解决方案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)>

【讨论】:

  • 效果很好,是的,这就是代码的来源。非常感谢这个。
【解决方案2】:

这个怎么样?

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(工作日索引)与我们正在寻找的工作日匹配时,我们处理最多一周的返回日期。

【讨论】:

    【解决方案3】:
    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
    

    【讨论】:

      【解决方案4】:

      这能满足您的要求吗?

      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      
      

      【讨论】:

      • 我如何定义它可能是“星期一”或“星期三”?
      • 只需致电date_of_next('Monday')date_of_next('Monday')
      • 但我需要弄清楚哪一天先到与我所在的那一天有关。可能是星期一,也可能是星期三。如果它是动态的,我如何传递该变量?
      猜你喜欢
      • 2021-03-23
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      • 2017-11-23
      • 2018-09-28
      • 2012-08-09
      相关资源
      最近更新 更多