从Ruby今天开始计算下周四(或任何一天)的日期,月份和年份的最佳方法是什么?
UPDATE 为了创建虚拟对象,我试图弄清楚如何计算随机时间。总的来说,我希望在下周四的下午4点到10点之间产生随机时间。
答案 0 :(得分:29)
date = Date.today
date += 1 + ((3-date.wday) % 7)
# date is now next Thursday
答案 1 :(得分:21)
<击> DateTime.now.next_week.next_day(3)
击>
@Nils Riedemann指出:
请记住,它不会在下一个星期四,而是星期四 下周。例如。如果明天是星期四,它将不会返回 明天,但是下周的星期四。
以下是我最近编写的一些代码的摘录,用于处理丢失的案例。
require 'date'
module DateTimeMixin
def next_week
self + (7 - self.wday)
end
def next_wday (n)
n > self.wday ? self + (n - self.wday) : self.next_week.next_day(n)
end
end
# Example
ruby-1.9.3-p194 :001 > x = DateTime.now.extend(DateTimeMixin)
=> #<DateTime: 2012-10-19T15:46:57-05:00 ... >
ruby-1.9.3-p194 :002 > x.next_week
=> #<DateTime: 2012-10-21T15:46:57-05:00 ... >
ruby-1.9.3-p194 :003 > x.next_wday(4)
=> #<DateTime: 2012-10-25T15:46:57-05:00 ... >
答案 2 :(得分:18)
除了像其他人所描述的那样下周四,Ruby提供了简单的方法来获取任何日期的月份和年份:
month = date.month
year = date.year
在Rails内部,您可以轻松地在下周四获得:
next_thur = Date.today.next_week.advance(:days=>3)
答案 3 :(得分:12)
答案 4 :(得分:4)
这个答案也简短而简单 https://stackoverflow.com/a/7930553/3766839
def date_of_next(day)
date = Date.parse(day)
delta = date > Date.today ? 0 : 7
date + delta
end
date_of_next "Thursday"