Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Ruby中获得给定月份的天数,以计算年份?_Ruby_Date - Fatal编程技术网

如何在Ruby中获得给定月份的天数,以计算年份?

如何在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

我相信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_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