首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ruby/Rails -上星期五拿到了吗?(上周星期五)

Ruby/Rails -上星期五拿到了吗?(上周星期五)
EN

Stack Overflow用户
提问于 2017-03-31 20:39:28
回答 4查看 6K关注 0票数 9

有没有办法在Rails中获得上一个星期五的约会日期?我见过最近的星期五,或前一个星期一或星期天,但我特别需要最后一个星期五。

所以,直到这周的星期五(包括本星期的星期五),都是前一周的星期五。然后从星期六开始,是前一天的星期五。

例如:

  • 3月4日(星期六)至3月10日(星期五) -> 3月3日(星期五)
  • 3月11日星期六到3月11日星期五。3月10日,星期五,-> 17
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-03-31 21:06:05

这是一种不附加任何条件的方法。这将接受日期、时间或DateTime对象。

代码语言:javascript
运行
复制
def prior_friday(date)
  days_before = (date.wday + 1) % 7 + 1
  date.to_date - days_before
end

现在,您可以进行以下任何操作:

代码语言:javascript
运行
复制
>> prior_friday(Date.today)
=> Fri, 24 Mar 2017
>> prior_friday(Date.tomorrow)
=> Fri, 31 Mar 2017
>> prior_friday(Date.new(2017,4,4))
=> Fri, 31 Mar 2017
>> prior_friday(Time.now)
=> Fri, 24 Mar 2017
>> prior_friday(DateTime.tomorrow)
=> Fri, 31 Mar 2017
>> prior_friday(1.year.from_now)
=> Fri, 30 Mar 2018

对于一周中不同的日子,在应用mod之前更改添加到date.wday的整数:

代码语言:javascript
运行
复制
def prior_monday(date)
  days_before = (date.wday + 5) % 7 + 1
  date.to_date - days_before
end

或者制定一个通用的方法:

代码语言:javascript
运行
复制
def prior_weekday(date, weekday)
  weekday_index = Date::DAYNAMES.reverse.index(weekday)
  days_before = (date.wday + weekday_index) % 7 + 1
  date.to_date - days_before
end

2018年8月4日(星期六)的例子如下:

代码语言:javascript
运行
复制
>> prior_weekday(Date.today, 'Saturday')
Sat, 28 Jul 2018
>> prior_weekday(Date.today, 'Friday')
Fri, 03 Aug 2018
>> prior_weekday(Date.tomorrow, 'Friday')
Fri, 03 Aug 2018
>> prior_weekday(Date.tomorrow, 'Saturday')
Sat, 04 Aug 2018
>> prior_weekday(Date.tomorrow, 'Sunday')
Sun, 29 Jul 2018
票数 21
EN

Stack Overflow用户

发布于 2020-01-17 09:51:24

您可以使用发生,因为Rails 5.2:

代码语言:javascript
运行
复制
Date.today.prev_occurring(:friday)
票数 24
EN

Stack Overflow用户

发布于 2017-03-31 20:53:09

尝试这个扩展,您可以使用它作为Time.last_fridayTime.now.last_friday

代码语言:javascript
运行
复制
class Time
  def self.last_friday
    time = (Time.now - 1.day)
    while !time.friday?
      time -= 1.day
    end
    time
  end
  def last_friday
    time = (self - 1.day)
    while !time.friday?
      time -= 1.day
    end
    time
  end
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43149326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档