Ruby: 如何按年日查找日期
Ruby: how to find a date by the year day
如何根据当年的日期找到日期?
比如你有年号235,它对应的是哪一天?
例如,您可以按如下方式查找一年中的第几天:
Date.today.yday
#=> 126 (for May 6, 2021)
如何实现相反的效果?
Date.some_method(126)
#=> 2021-05-06
我试过如下:
now = Date.today
#=> Thu, 06 May 2021
start_year = now.beginning_of_year
#=> Fri, 01 Jan 2021
start.advance(days: (start.yday + 126))
#=> Sat, 08 May 2021
为什么相差2天?
这应该有效(纯 ruby):
def day_of_year(num)
Date.new(Date.today.year) + num - 1
end
day_of_year(1) #=> 01/01/2021
day_of_year(235) #=> 23/08/2021
另一个选项:
def day_of_year(num)
Date.strptime(num.to_s, "%j")
end
day_of_year(1) #=> 01/01/2021
day_of_year(235) #=> 23/08/2021
注意:@steenslag 发布了实际正确的答案 - 请去投票。
Date.ordinal
给你日期,给定年份和数字。您甚至可以指定一个负数,它会计算从年底开始倒数的日期。 doc
试试这个。
Date.today - (Date.today.yday - 126)
如何根据当年的日期找到日期? 比如你有年号235,它对应的是哪一天?
例如,您可以按如下方式查找一年中的第几天:
Date.today.yday
#=> 126 (for May 6, 2021)
如何实现相反的效果?
Date.some_method(126)
#=> 2021-05-06
我试过如下:
now = Date.today
#=> Thu, 06 May 2021
start_year = now.beginning_of_year
#=> Fri, 01 Jan 2021
start.advance(days: (start.yday + 126))
#=> Sat, 08 May 2021
为什么相差2天?
这应该有效(纯 ruby):
def day_of_year(num)
Date.new(Date.today.year) + num - 1
end
day_of_year(1) #=> 01/01/2021
day_of_year(235) #=> 23/08/2021
另一个选项:
def day_of_year(num)
Date.strptime(num.to_s, "%j")
end
day_of_year(1) #=> 01/01/2021
day_of_year(235) #=> 23/08/2021
注意:@steenslag 发布了实际正确的答案 - 请去投票。
Date.ordinal
给你日期,给定年份和数字。您甚至可以指定一个负数,它会计算从年底开始倒数的日期。 doc
试试这个。
Date.today - (Date.today.yday - 126)