我确信在Ruby中有一个很好的简单优雅的单行程,可以给你一个月的天数,占一年,例如"1997年2月".它是什么?
mko*_*sma 125
如果你在Rails工作,如果你在和之间切换Time
,你最终会陷入困境,特别是在处理UTC /时区,夏令时等时.我的经验是最好的使用,并坚持到处都是. Date
DateTime
Time
因此,假设您正在使用Rails的Time类,根据上下文,有两个不错的选项:
如果您有月份m
和年份y
,请使用类方法Time
:
days = Time.days_in_month(m, y)
Run Code Online (Sandbox Code Playgroud)如果您有Time对象t
,请更清楚地询问当月最后一天的日期编号:
days = t.end_of_month.day
Run Code Online (Sandbox Code Playgroud)cra*_*tok 64
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)
Run Code Online (Sandbox Code Playgroud)
and*_*e-r 25
这是ActiveSupport的实现(稍微改编):
COMMON_YEAR_DAYS_IN_MONTH = [nil, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
def days_in_month(month, year = Time.now.year)
return 29 if month == 2 && Date.gregorian_leap?(year)
COMMON_YEAR_DAYS_IN_MONTH[month]
end
Run Code Online (Sandbox Code Playgroud)
小智 24
怎么样:
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)
Run Code Online (Sandbox Code Playgroud)
您可能还想查看Ruby on Rails中的Time :: days_in_month.
Ser*_*kyy 10
在当前日期的Rails项目中
Time.days_in_month(Time.now.month, Time.now.year)
Run Code Online (Sandbox Code Playgroud)
对于作为时间实例的任何日期t
Time.days_in_month(t.month, t.year)
Run Code Online (Sandbox Code Playgroud)
要么
t.end_of_month.day
Run Code Online (Sandbox Code Playgroud)
.
如果您有UTC 秒,则需要先获取时间实例
Time.at(seconds).end_of_month.day
Run Code Online (Sandbox Code Playgroud)
小智 5
修改其他格式的输入
def days_in_a_month(date = "2012-02-01")
date.to_date.end_of_month.day
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
36174 次 |
最近记录: |