在ruby中,如何使用他们的名字计算两个月之间的月数 例子:
Feb to Oct => 9
Dec to Mar => 4
Apr to Aug => 5
我怎样才能实现这个目标?
答案 0 :(得分:2)
def months_between( start_month, end_month)
month_names = %w[ Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ]
(12 + month_names.index( end_month ) - month_names.index( start_month ) ) % 12 + 1
end
答案 1 :(得分:0)
使用可以使用DateTime :: strptime来获取代表一年中月份的数字。从那里应该很容易
require 'date'
def distance(start_month, end_month)
distance = DateTime.strptime(end_month,"%b").month - DateTime.strptime(start_month,"%b").month + 1
distance < 0 ? distance + 12 : distance
end
答案 2 :(得分:0)
您可以定义包含可能月份名称的12个元素的数组。然后,当您需要查找month1
和month2
之间的月数时,您需要找到他们的索引,可能使用hash
,如下所示:
#let month1 and month2 be the values
array = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
hash = Hash[array.map.with_index.to_a] # => {"a"=>0, "b"=>1, "c"=>2}
#(hash[month2] + 12 - hash[month1]) % 12 should yield the desired result
然而,上述解决方案并未涉及多年。如果month1
为'Jan'
且month2
为'Feb'
,则结果将为1,无论month1
年和month2
年}。
我不熟悉Ruby,所以我的代码可能在语法上有错误。
答案 3 :(得分:0)
如果您有月份名称,则可以解析该月份并获取该月份的序列号,如下所示:
require 'date'
month1 = Date.parse("Feb").month
month1 = Date.parse("Apr").month
或者您可以使用12个月的数组来查找序列号。 对于几个月之间的计数:
result = ((month2 > month1) ? (month2 - month1) : (month1 - (month1 - month2)) + 1)
这将适用于几个月的序列。如果month1 id&#39; Dec&#39;并且month2是&#39; Mar&#39;,然后它将返回计数4,而不是9。