如何在Ruby中获得给定月份的天数,以计算年份?
我相信Ruby中有一个很好的简单而优雅的一行代码,可以告诉你一个月的天数,也就是一年的天数,比如“1997年2月”。这是什么?这是ActiveSupport的实现(稍作调整): 那么:如何在Ruby中获得给定月份的天数,以计算年份?,ruby,date,Ruby,Date,我相信Ruby中有一个很好的简单而优雅的一行代码,可以告诉你一个月的天数,也就是一年的天数,比如“1997年2月”。这是什么?这是ActiveSupport的实现(稍作调整): 那么: require 'date' def days_in_month(year, month) (Date.new(year, 12, 31) << (12-month)).day end # print number of days in Feburary 2009 puts days_in_m
require 'date'
def days_in_month(year, month)
(Date.new(year, 12, 31) << (12-month)).day
end
# print number of days in Feburary 2009
puts days_in_month(2009, 2)
需要“日期”
def天数(以月为单位)(年、月)
(日期:新年12月31日)如果你在Rails工作,如果你在时间
、日期
和日期时间
之间切换,很可能最终会被绊倒,尤其是在处理UTC/时区、夏令时等问题时。我的经验是,最好使用时间
,并在任何地方都坚持使用它
因此,假设您使用的是Rails的Time类,根据上下文,有两个很好的选择:
如果您有一个月m
和一年y
,请使用时间上的class方法:
days = Time.days_in_month(m, y)
如果您有时间对象t
,请询问当月最后一天的天数:
days = t.end_of_month.day
使用Time.days\u in_month(month)
其中month=1
用于一月,2
用于二月,等等。修改其他格式的输入
require 'date'
def days_in_month(year, month)
Date.new(year, month, -1).day
end
# print number of days in February 2012
puts days_in_month(2012, 2)
def days_in_a_month(date = "2012-02-01")
date.to_date.end_of_month.day
end
从rails 3.2开始,有一个内置版本:
(唉,在这个答案之后就出现了,这需要人们进行一次长途旅行)我认为这是最简单的方法
def get_number_of_days(date = Date.today)
Date.new(date.year, date.month, -1).mday
end
Time.now.end\u of\u month.day
-当前月份
Date.parse(“2014-07-01”).月底.day
-使用月内第一天的日期
当前日期取决于Rails项目中的ActiveSupport
Time.days_in_month(Time.now.month, Time.now.year)
对于作为时间实例的任何日期t
Time.days_in_month(t.month, t.year)
或
.
如果有UTC秒数,则需要先获取时间实例
Time.at(seconds).end_of_month.day
使用日期的简单方法
:
def days_of_month(month, year)
Date.new(year, month, -1).day
end
由于时间与此目的无关,因此您只需要一个日期对象:
[*Date.today.all_month].size
对于给定的日期对象,我觉得最简单的方法是:
Date.today.all_month.count
顺便说一句,最初是在模块Time.super中实现的。现在已经过时了。看看其他的一些答案。如果你使用rails,@mkosma有一个更简单的答案。你能解释一下这个def是什么吗?因为我喜欢,但我想understand@Mike韦德,这假设我们知道十二月有31天。如果我们连这都不知道呢?十二月总是有31天ave 31天。@nemesisfixx,您可以在1月1日下班,而不是12月31日。((Date.new(year+1,1,1)-1.day)谢谢!但不是真的——OP问的是ruby,而不是rails。不过,我很想知道有多少人在ruby Off rails中工作。我在rails之外使用ruby,这个答案对我没有好处。@SteveRawlingson让你的事业步入正轨吧!:PI正在实现一个需要的gem,我不能假设用户会使用gem在Rails中。所以我真的认为,虽然更干净,但这不应该是公认的答案。将它放在上下文中也很好,因为很多人在Rails中会更喜欢这个选项。在Ruby项目中工作并不禁止您使用activesupport gem。来源:顺便说一句,我不需要在我的Ruby only程序中要求日期。您只需要不需要日期,因为其他地方已经需要了。你也可以做date.today.end\u of_month.day
时间并不无关,OP想知道给定月份的天数,例如1997年2月。我的意思是,既然我们不需要小时、分钟或秒,那么就不需要时间对象y、 因此,在这种情况下,日期对象就足够了。我更喜欢在可能的情况下使用时间对象,这样就不必从库中提取日期对象。可以找到所有月份的文档。
[*Date.today.all_month].size
Date.today.all_month.count