Rails:是否有距离获取最接近今天的Date对象?

鉴于约会,我如何在Rails中找到最近的星期一?

我知道我可以这样做:

Date.tomorrow Date.today

是不是像Date.nearest:星期一?

Date对象上的商业方法将允许您执行此操作。 这个例子将在下周一给你。

Date.commercial(Date.today.year, 1+Date.today.cweek, 1) 

如果您需要下一个或上一个星期一,以最接近的为准,您可以:

 Date.commercial(Date.today.year, Date.today.cwday.modulo(4)+Date.today.cweek, 1) 

我现在无法执行此操作,因此如果存在语法错误,请原谅我。

这有点棘手,但计算起来并不难。

使用ActiveSupport::DateAndTimeCalculations#end_of_week计算一周结束,此方法接受start_day参数,该参数用于指示一周的开始日期(默认情况下为:monday )。 他们甚至实施了sunday方法。

诀窍如下:如果你想计算最接近的星期一,你可以把它计算为星期二开始的星期结束(星期二=>第一天,星期三=>第二天,……,星期一=>第七天这也是一周的结束)。

所以你需要做的就是:

 # it will return current date if today is Monday and nearest Monday otherwise Date.today.end_of_week(:tuesday) 

假设你想要两个方向: Date.today.beginning_of_week + 7*(Date.today.wday/5)

我知道这是一个老线程,但总是很高兴为未来的寻求者保持最新状态。

我们假设今天是8月19日星期五。 我所做的就是离我最近的星期一这样:

 monday = Date.today.monday 

然后从那里你可以回来一周或一周前进这样:

 last_monday = monday.last_week next_monday = monday.next_week 

未经测试,所以你可能需要微调,但在这里你去:

 def Date.nearest_monday today = Date.today wday = today.wday if wday > 4 # over the half of the week today + (7 - wday) # next monday else today - (1 + wday) # previous monday end end