【问题标题】:Get the closest date of a specific week day获取特定工作日的最近日期
【发布时间】:2013-06-24 02:04:17
【问题描述】:

我有一个约会,例如,我想找到最近的星期四。虽然我希望它适用于任何工作日,而不仅仅是星期四。

为避免混淆,我不想要下周四,我想要上周四或下周四,以最接近的为准。所以它必须是双向的。

我已经编写了一个代码,但我显然对 while 循环不满意,我想知道你们是否有更好的实现想法。

def closest_date(date, wday)

  # already ok
  return date if date.wday == wday

  before_date = date
  after_date = date

  until before_date.wday == wday && after_date.wday == wday
    before_date -= 1.day unless before_date.wday == wday
    after_date += 1.day unless after_date.wday == wday
  end

  if (date - before_date).to_i > (after_date - date).to_i
    return after_date
  else
    return before_date
  end

end

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 date time


    【解决方案1】:
    def closest_date(date, wday)
      distance = wday - date.wday
      date + distance.days
    end
    

    【讨论】:

    • date = 星期六,wday = 0 最接近的日期应该是 "date + 1.day",你返回的是 "date + -6.day"
    【解决方案2】:

    我会这样做:

    def closest_day(weekday_name,date=Date.today)
      distance = Date.parse(weekday_name).cwday - date.cwday
      (date + (distance.abs < 4 ? distance : 7 - distance.abs).days)
    end
    

    其中weekday_name 是例如“thursday”。

    【讨论】:

    • 该死的我试过类似的东西,但一定是在某个地方出错了。非常感谢!
    • 而不是 ' (date + (distance.abs 距离现在是 [0..7]! HTH
    • def nearest_day(cwday, date = Date.today) distance = cwday - date.cwday (date + (distance.abs
    猜你喜欢
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    相关资源
    最近更新 更多