2010-10-14 20 views
1

嘿, 简单的问题,我的大脑今天是空的.. 我有一个月份(1-12)和给定月份的数组。确定JavaScript中的月-3和+3

var cMonate = new Array("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", 
          "August", "September", "Oktober", "November", "Dezember"); 

我给定月份:

var Month = currentMonth.getMonth(); 

月份为8。现在,我会读最后3个月和下个月。

简单示例: 可能 月 月 九月十月 月

我怎么能找到?

回答

0

不顾你们个月为无限级数,从开始-infinity,去-3,-2,-1,0,1,2,...,12,13,14,...

然后,它很简单:

for(var infindex = monthindex-3; infindex < month+4; ++infindex) { 
    return month(infindex); 
} 

然后你就可以创建一个映射,从无限的指数不断重复序列:

function month(infiniteindex) { 
    var index = infinteindex % 12; // since every 12 months, the same month occurs. 
    // EDIT --- javascript allows negative result for modulo 
    if(index < 0) index = index+12; 
    return cMonate[index]; 
} 
+0

var cMonate = new Array(“Januar”,“Februar”,“M ä rz”,“April”,“Mai”,“Juni”,“Juli”, “August”,“September”,“Oktober”, “十一月”,“Dezember”); (var infindex = Monat-3; infindex Patrik 2010-10-14 14:55:41

+1

这是错误的:如果'infindex'是-2,-2%12 == -2,并且'cMonat [-2]'是'undefined'。 – sje397 2010-10-14 15:57:44

+0

@ sje397:darn - 确实:ECMAScript标准规定在k = x%y中有abs(k) xtofl 2010-10-14 17:43:45

2
for(var m = Month - 3; m <= Month + 3) { 
    var usedMonth = (m < 1 ? m + 12 : (m > 12 ? m - 12 : m)); 
    // use 'usedMonth' here for whatever...e.g.: 
    console.log(cMonate[usedMonth-1]); 
} 
+0

嘿,什么的console.log(cMonate [usedMonth-1]); ?你能帮我解释一下吗? – Patrik 2010-10-14 14:43:25

+0

@Patrik:console.log只是打印一个字符串(如果你安装了firebug,或者在Chrome开发工具中,则在FF中)。你有一个数组(在javascript中索引从0开始)月份名称'cMonate'。因为'cMonate'索引从0开始,'usedMonth'从1开始,你需要减去1。所以,这只是按照您的“样本输出”打印出月份。 – sje397 2010-10-14 15:14:04