在Ruby中,从今天开始计算下一个星期四(或任何一天)的日期、月份和年份的最佳方法是什么?
UPDATE为了创建虚拟对象,我试图弄清楚如何计算随机时间。总之,我想生成一个随机的时间,在下周四的下午5点到10点之间。
date = Date.today
date += 1 + ((3-date.wday) % 7)
# date is now next Thursday
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 ... >
除了像其他人描述的那样获取下周四之外,Ruby还提供了从任何日期获取月份和年份的简单方法:
month = date.month
year = date.year
在Rails内部你可以很容易地得到下周四这样:
next_thur = Date.today.next_week.advance(:days=>3)
感谢@IvanSelivanov在评论中指出这一点。你可以跳过一个步骤:
next_thur = Date.today.next_week(:thursday)
在我看来,对于这样的东西,慢性库真是太棒了。
Ruby代码应该是:
def date_of_next(day)
Chronic.parse('next #{day}')
end
这个答案也很简短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"