Ruby on rails 如何在Ruby中查找周末日期?

Ruby on rails 如何在Ruby中查找周末日期?,ruby-on-rails,ruby,date,Ruby On Rails,Ruby,Date,我在Ruby中有以下日期对象 Date.new(2009, 11, 19) 我将如何找到下一个星期五?Rails'有一些方法可以帮助您。如果您不使用Rails,您可以只需要ActiveSupport。您可以使用周末(AFAIK仅在Rails中可用) 但这可能不起作用,这取决于你到底想要什么。另一种方法可能是 >> d = Date.new(2009, 11, 19) >> (d..(d+7)).find{|d| d.cwday == 5} => Fri, 20 N

我在Ruby中有以下日期对象

Date.new(2009, 11, 19)
我将如何找到下一个星期五?

Rails'有一些方法可以帮助您。如果您不使用Rails,您可以只需要ActiveSupport。

您可以使用周末(AFAIK仅在Rails中可用)

但这可能不起作用,这取决于你到底想要什么。另一种方法可能是

>> d = Date.new(2009, 11, 19)
>> (d..(d+7)).find{|d| d.cwday == 5}
=> Fri, 20 Nov 2009
如果d已经是星期五,那么假设您想要下一个星期五:

>> d = Date.new(2009, 11, 20) # was friday
>> ((d+1)..(d+7)).find{|d| d.cwday == 5}
=> Fri, 27 Nov 2009
d=Date.new(2009,11,19)
d+=(5-d.wday)>0?5-d.wday:7+5-d.wday

当除数为正数时,Ruby的模运算(%)返回正数,您可以这样做:

some_date = Date.new(2009, 11, 19)
next_friday = some_date + (5 - some_date.cwday) % 7
我在这里看到的唯一问题是,如果某个日期是星期五,
下一个星期五将是与某个日期相同的日期。如果这不是期望的行为,则可以使用轻微的修改:

some_date = Date.new(...)
day_increment = (5 - some_date.cwday) % 7
day_increment = 7 if day_increment == 0
next_friday = some_date + day_increment

这段代码不依赖于额外的外部依赖项,主要依赖于整数运算。

老问题,但如果您使用的是rails,您现在可以执行以下操作以获得下周五的结果

Date.today.sunday + 5.days
同样,你也可以做以下事情来获得这个星期五

Date.today.monday + 4.days 

我想,
需要activesupport
(当然,在合适的
gem安装之后)就足够了。如果日期恰好是星期六,你的第一个示例将在昨天返回。是的,scott,这就是我所说的“依赖你想要的可能不起作用”的意思。它查找当前星期五:)。在应用算法之前,您不能只在“某一天”中添加一天,而不是进行额外检查。日期+1+(4-date.cwday)%7可以正常工作。
Date.today.sunday + 5.days
Date.today.monday + 4.days