例如,给出了输入
day = 'Monday'
Run Code Online (Sandbox Code Playgroud)
我该如何计算日期day?
def date_of_next(day)
...
end
Run Code Online (Sandbox Code Playgroud)
fl0*_*00r 94
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)>
Run Code Online (Sandbox Code Playgroud)
Dev*_*n B 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
Run Code Online (Sandbox Code Playgroud)
s_d*_*lan 18
对于像我这样来自这里寻找Rails解决方案的人来说,从Rails 5.2开始,有一种更容易实现的方法.
对于没有专门使用Rails的任何人(如原始海报),ActiveSupport gem中提供了此功能.
为了找到下周发生的一周,我们可以简单地写一些类似的东西Date.today.next_occurring(:friday).
有关详细信息,请参阅文档.
Dav*_*ton 13
对于这样的东西,我依赖于慢性库.
Ruby代码将是:
def date_of_next(day)
Chronic.parse("next #{day}")
end
Run Code Online (Sandbox Code Playgroud)
小智 12
如果您使用的是轨道,可以Date.today.sunday在周日或Date.today.monday周一使用.然后Date.today.sunday - 1.day是周六等
pan*_*teo 11
导轨 >= 5.2.3
Date.current.next_occurring(:monday)
Run Code Online (Sandbox Code Playgroud)
https://api.rubyonrails.org/classes/DateAndTime/Calculations.html#method-i-next_occurring
兼容 Rails 4 的解决方案:
(Date.today + 1.week).beginning_of_week(:monday)
您可以在其中提供您想要查找的日期作为符号参数;默认为:monday.
请注意,这将查找给定日期的下一次出现 - 如果今天是星期一并且您正在查找下星期一,它将返回从今天起一周后的星期一。
一些等效的方法:
1.week.from_now.beginning_of_week(:monday).to_date
1.week.since(Date.today).beginning_of_week(:monday)
(来源: https: //apidock.com/rails/Date/beginning_of_week/class)
| 归档时间: |
|
| 查看次数: |
19991 次 |
| 最近记录: |