neo*_*eon 21 ruby datetime ruby-on-rails ruby-on-rails-3
从今天开始计算Ruby的下周四(或任何一天)的日期,月份和年份的最佳方法是什么?
更新为了创建虚拟对象,我试图弄清楚如何计算随机时间.总的来说,我想在下周四的下午4点到10点之间产生一个随机时间.
mil*_*ose 32
date = Date.today
date += 1 + ((3-date.wday) % 7)
# date is now next Thursday
Run Code Online (Sandbox Code Playgroud)
Ada*_*lin 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 ... >
Run Code Online (Sandbox Code Playgroud)
Wat*_*Box 18
除了像其他人描述的那样下周四,Ruby提供了简单的方法来获取任何日期的月份和年份:
month = date.month
year = date.year
Run Code Online (Sandbox Code Playgroud)
在Rails中,您可以轻松地在下周四获得:
next_thur = Date.today.next_week.advance(:days=>3)
Run Code Online (Sandbox Code Playgroud)
Dav*_*ton 12
IMO 慢性库对于这样的东西很棒.
Ruby代码将是:
def date_of_next(day)
Chronic.parse('next #{day}')
end
Run Code Online (Sandbox Code Playgroud)