Ruby中的当前月/年和上个月/年的下拉

我正在创建一个12个月的线图,其中包含前12个月的数据。当前月份或第12个订单项应显示为OCT 13。第一行应该说OCT 12。Ruby中的当前月/年和上个月/年的下拉

我该如何写一些东西来动态拉动当前月份以及之前的11个月,一直回到去年的当前月份。我遇到的问题是确保去年十月在2012年被标记为一个月,但在3个月内,我需要将1月标记为2013,而不用更改代码。

回答:

使用<<操作了一个月

require "date" 

12.downto(0).map{ |d| (Date.today << d).strftime("%^b %y") }

#=> ["OCT 12", "NOV 12", "DEC 12", "JAN 13", "FEB 13", "MAR 13", "APR 13",

# "MAY 13", "JUN 13", "JUL 13", "AUG 13", "SEP 13", "OCT 13"]

使用@ Stefan的输入顺序更改为转移的日期。

回答:

a = [Date.today.prev_year] 

12.times{a.push(a.last.next_month)}

a.map{|d| d.strftime("%^b %y")}

# => [

"OCT 12",

"NOV 12",

"DEC 12",

"JAN 13",

"FEB 13",

"MAR 13",

"APR 13",

"MAY 13",

"JUN 13",

"JUL 13",

"AUG 13",

"SEP 13",

"OCT 13"

]

回答:

require 'date' 

def last_n_months(n, format='%^b %Y')

(n+1).times.map { |i| (Date.today << i).strftime(format) }

end

last_n_months(12)

# => ["OCT 2013", "SEP 2013", "AUG 2013", "JUL 2013", "JUN 2013", "MAY 2013", "APR 2013", "MAR 2013", "FEB 2013", "JAN 2013", "DEC 2012", "NOV 2012", "OCT 2012"]

回答:

是,使用Date#methods的是去这里的路,是的,他们都需要得到今天的日期,但不会是更令人满意滚你自己?这里有一种方法:

# Assume start_year falls in current millenium. 1 <= start_month <= 12 

MONTHS = %q[JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC].split

def doit(start_year, start_month)

pairs = (((start_month-1)..11).to_a.product [start_year-1]) +

((0..(start_month-1)).to_a.product [start_year])

pairs.map! {|p| MONTHS[p.first] + " #{p.last.to_s}"}.reverse

end

p doit(13, 10)

首先创建pairs =>

[[9, 12], [10, 12], [11, 12]] + 

[[0, 13], [1, 13], [2, 13], [3, 13], [4, 13], [5, 13], [6, 13], [7, 13], [8, 13], [9, 13]]

这是

[[9, 12], [10, 12], [11, 12], [0, 13], [1, 13], [2, 13], [3, 13], 

[4, 13], [5, 13], [6, 13], [7, 13], [8, 13], [9, 13]]

然后用含有月份缩写,一年字符串替换对元素。

["OCT 13", "SEP 13", "AUG 13", "JUL 13", "JUN 13", "MAY 13", "APR 13", 

"MAR 13", "FEB 13", "JAN 13", "DEC 12", "NOV 12", "OCT 12"]

我明显需要所有括号来计算pairs。任何人都可以解释为什么我需要在第二行的外部?

以上是 Ruby中的当前月/年和上个月/年的下拉 的全部内容, 来源链接: utcz.com/qa/260042.html

回到顶部