下周四(或一周中的任何一天)找到Ruby



在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"

相关内容

  • 没有找到相关文章

最新更新