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

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)

  • 卧虎藏龙,这可能就是这个帖子的最佳答案.:D谢谢 (3认同)

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)

  • 不鼓励这样移动目标职位.如果你想最初了解一些事情,请把它放在你的问题中. (3认同)
  • 请记住,它不会在下周四到来,而是在下周的星期四.例如.如果明天是星期四,它将不会明天返回,而是下周的星期四. (3认同)

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)

  • 这是一个严重的矫枉过正 (3认同)
  • 如果只有某种方法,我们可以修改其源代码。 (2认同)