我有一个日期范围选择器,我想知道开始日期和结束日期之间的月份名称。
例如,假设用户选择开始日期为2014年11月12日,结束日期为2015年4月13日 所以我想要的是拥有如下的数组 ['11月14日','12月14日','1月15日','2月15日','3月15日','4月15日']
您的方法是如何实现这一目标的? PS:我有项目中包含的时刻,如果您的解决方案是使用momet
,那么没问题答案 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)
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。