有没有办法在Rails中获得上一个星期五的约会日期?我见过最近的星期五,或前一个星期一或星期天,但我特别需要最后一个星期五。
所以,直到这周的星期五(包括本星期的星期五),都是前一周的星期五。然后从星期六开始,是前一天的星期五。
例如:
发布于 2017-03-31 21:06:05
这是一种不附加任何条件的方法。这将接受日期、时间或DateTime对象。
def prior_friday(date)
days_before = (date.wday + 1) % 7 + 1
date.to_date - days_before
end现在,您可以进行以下任何操作:
>> 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的整数:
def prior_monday(date)
days_before = (date.wday + 5) % 7 + 1
date.to_date - days_before
end或者制定一个通用的方法:
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
end2018年8月4日(星期六)的例子如下:
>> 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发布于 2020-01-17 09:51:24
您可以使用发生,因为Rails 5.2:
Date.today.prev_occurring(:friday)发布于 2017-03-31 20:53:09
尝试这个扩展,您可以使用它作为Time.last_friday或Time.now.last_friday
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
endhttps://stackoverflow.com/questions/43149326
复制相似问题