Ruby发现下周四(或一周中的任何一天)

时间:2011-10-01 16:00:01

标签: ruby-on-rails ruby ruby-on-rails-3 datetime

从Ruby今天开始计算下周四(或任何一天)的日期,月份和年份的最佳方法是什么?

UPDATE 为了创建虚拟对象,我试图弄清楚如何计算随机时间。总的来说,我希望在下周四的下午4点到10点之间产生随机时间。

5 个答案:

答案 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)

IMO chronic库对于这样的东西很棒。

Ruby代码将是:

def date_of_next(day)
    Chronic.parse('next #{day}')
end

答案 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"