Ruby代码获取下周一(或一周中的任何一天)的日期

时间:2011-10-28 14:11:55

标签: ruby date

例如,输入

day = 'Monday'

如何计算day的日期?

def date_of_next(day)
  ...
end

7 个答案:

答案 0 :(得分:90)

require 'date'

def date_of_next(day)
  date  = Date.parse(day)
  delta = date > Date.today ? 0 : 7
  date + delta
end

Date.today
#=>#<Date: 2011-10-28 (4911725/2,0,2299161)>
date_of_next "Monday"
#=>#<Date: 2011-10-31 (4911731/2,0,2299161)>
date_of_next "Sunday"
#=>#<Date: 2011-10-30 (4911729/2,0,2299161)>

答案 1 :(得分:21)

我知道这是一篇旧帖子,但我提出了几种快速获取本周上一天和下一天的方法。

# date is a Date object and day_of_week is 0 to 6 for Sunday to Saturday

require 'Date'

def get_next_day(date, day_of_week)
  date + ((day_of_week - date.wday) % 7)
end

def get_previous_day(date, day_of_week)
  date - ((date.wday - day_of_week) % 7)
end

puts today = Date.today
# 2015-02-24

puts next_friday = get_next_day(today, 5)
# 2015-02-27

puts last_friday = get_previous_day(today, 5)
# 2015-02-20

答案 2 :(得分:13)

对于这样的东西,我依赖chronic库。

Ruby代码将是:

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

答案 3 :(得分:13)

对于像我这样来自这里寻找Rails解决方案的人来说,从Rails 5.2开始,有一种更简单的方法可以做到这一点。

对于没有专门使用Rails的任何人(如原始海报),ActiveSupport gem中提供了此功能。

要查找下周发生的一周,我们可以简单地编写类似Date.today.next_occurring(:friday)的内容。

有关详细信息,请参阅the documentation

答案 4 :(得分:12)

如果您使用的是rails,则可以使用Date.today.monday表示星期日,或Date.today.sunday - 1.day表示星期一。然后是Path::new()星期六等。

答案 5 :(得分:1)

Rails 4兼容解决方案:

(Date.today + 1.week).beginning_of_week(:monday)

您可以在其中提供您希望查找的日期作为符号参数;默认值为:monday

请注意,这将找到给定日期的下一个事件-如果今天是星期一,而您正在寻找下一个星期一,它将从今天开始一周返回星期一。

(来源:https://apidock.com/rails/Date/beginning_of_week/class

答案 6 :(得分:1)