查找两个日期之间的月份名称和年份

时间:2015-11-26 05:58:43

标签: javascript date momentjs

我有一个日期范围选择器,我想知道开始日期和结束日期之间的月份名称。

例如,假设用户选择开始日期为2014年11月12日,结束日期为2015年4月13日 所以我想要的是拥有如下的数组 ['11月14日','12月14日','1月15日','2月15日','3月15日','4月15日']

您的方法是如何实现这一目标的? PS:我有项目中包含的时刻,如果您的解决方案是使用momet

,那么没问题

5 个答案:

答案 0 :(得分:1)

你可以从第一个日期的月份的第一天(在你的例子11月1日)开始写一个循环,并在每次迭代中添加一个月(这样它总是每个月的第一个月),直到迭代日期超过结束日期。对于每次迭代,您将月份添加到数组中。

我更喜欢从1开始,因为它可以很好地处理边缘情况。例如,如果您从1月31日开始并添加一个月,我不确定您是否会跳过2月份。

答案 1 :(得分:1)

您可以将月份添加到某个日期,然后在每次迭代时获得月份,直到您的开始日期年份等于结束日期年份,并且在每次迭代时获得月份索引

getMonthName(date.getMonth()) function getMonthName(index){      //logic }

将为您提供月份名称并进行进一步处理。

答案 2 :(得分:1)

这个怎么样? http://codepen.io/bhargav175/pen/EVBZyL

var dates = ['05-12-2014','12-11-2015'];
var diff = dates.map(function(i){
var m = moment(i);

return {
  month : m.month(),
  year : m.year()
};
});

var start = Object.assign({},diff[0]), end= Object.assign({},diff[diff.length-1]);

var monthNames = ["Jan","Feb","Mar","Apr","May","June","July","Aug","Sep","Oct","Nov","Dec"];

var months = [];
if(end.year > = start.year){
while(start.month < end.month ||  start.year < end.year){

       if(start.month < 11){
          start.month ++;
       }else{
         start.month = 0;
         start.year++;
       }
       months.push(monthNames[start.month]+" ,"+start.year)
}}
console.log(months);

答案 3 :(得分:1)

这是一个使用moment.js(fiddle)的小片段:

var d1 = new Date(2015, 10, 27);
var d2 = new Date(2015, 11, 27);

var ydiff = d2.getYear() - d1.getYear();
var mdiff = d2.getMonth() - d1.getMonth();

var diff = (ydiff*12 + mdiff);
var arr=[]
for(i = 0 ; i<=diff;i++){
if(i==0)
    d1.setMonth(d1.getMonth() -1);
else
    d1.setMonth(d1.getMonth() + 1);

    arr[i]= moment(d1).format("MMM YY");
}
alert(arr);

答案 4 :(得分:0)

使用Moment.js

实现5行
var startDate = moment('12-Nov-2014', 'DD-MMM-YYYY');
var endDate = moment('13-Apr-2015', 'DD-MMM-YYYY');
var iterationDate = startDate.clone().add(-1, 'month');

var resultArr=[];
while(+(iterationDate.add(1, 'month'))<+endDate.endOf('month')) resultArr.push(iterationDate.format('MMM YY'));
// resultArr : Nov 14,Dec 14,Jan 15,Feb 15,Mar 15,Apr 15

查看小提琴here