给定一个日期,我如何在Rails中找到最近的星期一?Rails:有没有拿到距离今天最近的星期一的Date对象?
我知道我可以做这样的事情:
Date.tomorrow Date.today
有什么样Date.nearest:星期一?
给定一个日期,我如何在Rails中找到最近的星期一?Rails:有没有拿到距离今天最近的星期一的Date对象?
我知道我可以做这样的事情:
Date.tomorrow Date.today
有什么样Date.nearest:星期一?
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)
我现在不能执行这一权利,所以请原谅我,如果有语法错误。
`.divmod(4)`返回一个数组。你可以使用`.divmod(4)[1]`或`.modulo(4)`来代替; D – PeterWong 2010-12-23 02:33:47
@PeterWong谢谢你指出。它已被纠正。 – sgriffinusa 2010-12-23 02:34:42
未经检验的,所以你可能需要微调,但在这里你去:
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
假设你想两个方向:Date.today.beginning_of_week + 7*(Date.today.wday/5)
这是一个有点棘手,但不能因此很难计算。
使用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)
我知道这是一个古老的线程,但它总是很高兴,以保持它当前为未来的求职者。
让我们假设今天是说8月19日星期五。所有我做的就是我最近的周一是这样的:
monday = Date.today.monday
然后从那里你可以回去一个星期或转发一个星期这样的:
last_monday = monday.last_week
next_monday = monday.next_week
你需要在两个方向去?即如果是星期二,则转到昨天,但如果星期五转到下一个星期一? – zsalzbank 2010-12-23 01:22:41