2014-01-29 61 views
2

我必须有两个日期fromto。我想在这两个日期之间得到所有的月份名称。得到两个日期之间的月份名称

以下是我的代码

var monthNames = [ "January", "February", "March", "April", "May", "June", 
     "July", "August", "September", "October", "November", "December" ]; 

function diff(from, to) { 
    var datFrom = new Date('1 ' + from); 
    var datTo = new Date('1 ' + to); 
    var arr = monthNames.slice(datFrom.getMonth(), datTo.getMonth() + 1); 
} 

上面的代码适用于以下输入

diff('September 2013', 'December 2013'); 

,但它不适用于本

diff('September 2013', 'February 2014'); 

工作,我怎样才能使它发挥作用?

+3

您希望它为'diff('September 2013','February 2015')'做什么? – lurker

+0

我想要这两个日期之间的所有月份名称。 – 2619

+0

你想重复的月份名称是问题的要点,我相信 –

回答

5

煤矿是更好:http://jsfiddle.net/kS73f/8/

var monthNames = [ "January", "February", "March", "April", "May", "June", 
     "July", "August", "September", "October", "November", "December" ]; 

function diff(from, to) { 
    var arr = []; 
    var datFrom = new Date('1 ' + from); 
    var datTo = new Date('1 ' + to); 
    var fromYear = datFrom.getFullYear(); 
    var toYear = datTo.getFullYear(); 
    var diffYear = (12 * (toYear - fromYear)) + datTo.getMonth(); 

    for (var i = datFrom.getMonth(); i <= diffYear; i++) { 
     arr.push(monthNames[i%12] + " " + Math.floor(fromYear+(i/12))); 
    }   

    return arr; 
} 

console.log(diff('September 2013', 'March 2014')); 
+0

当我调用这个'console.log(diff('September 2013','March 2014'));''然后'March'不包含在其中。 – 2619

+0

更新了jsFiddle,它是一个旧版本。在for循环中将'<'更改为'<=' –

+0

是的,现在很好,但有一点,我怎样才能在这几个月里增加一年。例如如果我调用'console.log(diff('September 2013','March 2015'));'然后我需要返回'month year'。我如何修改这个? – 2619

2

你将不得不做一个比切片更手动的方法。这里有一个起点,您可以确定如何处理评论中提到的案例。

function diff(from, to) { 
    var result = []; 
    var datFrom = new Date('1 ' + from); 
    var datTo = new Date('1 ' + to); 
    if(datFrom < datTo) { 
     var month = datFrom.getMonth(); 
     var toMonth = datTo.getMonth() + 1 + ((datTo.getYear() - datFrom.getYear())*12); //toMonth adjusted for year 
     for(; month < toMonth; month++) { //Slice around the corner... 
     result.push(monthNames[month % 12]); 
     } 
    } 

    return result; 
} 

diff('September 2013', 'February 2014'); //=["September", "October", "November", "December", "January", "February"] 
0
var monthNames = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; 

function diff(from, to) { 
    var datFrom = new Date('1 ' + from); 
    var datTo = new Date('1 ' + to); 
    var arr; 
    if(datFrom > datTo) { 
     return diff(to, from); 
    } 

    var fromYear = datFrom.getFullYear(); 
    var toYear = datTo.getFullYear(); 

    if(fromYear === toYear) { 
     return monthNames.slice(datFrom.getMonth(), datTo.getMonth() + 1); 
    } else { 
     var arr = addYear(monthNames.slice(datFrom.getMonth(), new Date('1 December ' + fromYear)), fromYear); 
     for(var i = 1; i < (toYear - fromYear); i++) { 
     arr = arr.concat(addYear(monthNames, fromYear + i)); 
     } 
     return arr.concat(addYear(monthNames.slice(new Date('1 January ' + fromYear).getMonth(), datTo.getMonth() + 1), toYear)); 
    } 
} 

function addYear(arr, year) { 
    var updatedArr = []; 
    for(var i = 0; i < arr.length; i++) { 
    updatedArr[i] = arr[i] + ' ' + year; 
    } 
    return updatedArr; 
} 

不是试图console.log(diff('September 2013', 'February 2015'))进行测试。

+0

当我调用这个'console.log(diff('September 2013','March 2014'));'那么它会记录'[“September”,“十月“”十一月“”十二月“”一月“”二月“”三月“”四月“”五月“”六月“”七月“”八月“”九月“”十月“ ,“十一月”,“十二月”]' – 2619

+0

@ 2619 Ups,错字。修好了,现在就试试。 –

+0

如何将年份与月份包含在一起? – 2619

-1

懒回答:

var monthNames = [ "January", "February", "March", "April", "May", "June", 
     "July", "August", "September", "October", "November", "December", 
     "January", "February", "March", "April", "May", "June", 
     "July", "August", "September", "October", "November", "December" ]; 

function diff(from, to) { 
    var mFrom = new Date('1 ' + from).getMonth(); 
    var mTo = new Date('1 ' + to).getMonth(); 
    mTo = mTo < mFrom ? mTo + 12 : mTo; 
    return monthNames.slice(mFrom, mTo + 1); 
} 

alert(diff('September 2013', 'December 2013')); 
alert(diff('September 2013', 'February 2014')); 
0

以下修改原有的功能尽可能少的,如果这能帮助从理解的角度来看,OP。

function diff(from, to) { 
    var datFrom = new Date('1 ' + from); 
    var datTo = new Date('1 ' + to); 
    var arr = monthNames.slice(datFrom.getMonth(), datTo.getMonth() + 1); 

    if (!arr.length) { 
     arr = monthNames.slice(datFrom.getMonth(), 12); 
     arr = arr.concat(monthNames.slice(0, datTo.getMonth() + 1)); 
    } 

    return arr; 
} 

console.log(diff('December 2013', 'February 2014')); //["September", "October", "November", "December", "January", "February"] 
+0

我也想包括所有这些月的一年。我怎样才能做到这一点? – 2619

相关问题