2010-12-23 44 views

回答

20

Date对象上的commercial方法将允许您执行此操作。这个例子会在下个星期一给你。

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

如果您需要下一首或上周一,取其最接近的,你可以这样做:

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

我现在不能执行这一权利,所以请原谅我,如果有语法错误。

+0

`.divmod(4)`返回一个数组。你可以使用`.divmod(4)[1]`或`.modulo(4)`来代替; D – PeterWong 2010-12-23 02:33:47

+0

@PeterWong谢谢你指出。它已被纠正。 – sgriffinusa 2010-12-23 02:34:42

0

未经检验的,所以你可能需要微调,但在这里你去:

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 
5

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

8

这是一个有点棘手,但不能因此很难计算。

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

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

因此,所有你需要做的是:

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

我知道这是一个古老的线程,但它总是很高兴,以保持它当前为未来的求职者。

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

monday = Date.today.monday 

然后从那里你可以回去一个星期或转发一个星期这样的:

last_monday = monday.last_week 
next_monday = monday.next_week 
相关问题