2017-04-27 48 views
0

我有一個報告中只允許用戶選擇從最近3個月的選項,如下圖所示:獲取最近3個月的名字中選擇下拉

Month requirement in select

我想寫一個JavaScript函數爲了達成這個。

我想什麼:

document.write(getLastMonths(4)); 

它打印:

function getLastMonths(n) { 

    var months = new Array(); 

    var today = new Date(); 
    var year = today.getFullYear(); 
    var month = today.getMonth() + 1; 

    var i = 0; 
    do { 
     months.push(year + (month > 9 ? "" : "0") + month); 
     if(month == 1) { 
      month = 12; 
      year--; 
     } else { 
      month--; 
     } 
     i++; 
    } while(i < n); 

    return months; 

} 

然後,我通過傳遞參數調用的函數

201704,201703,201702,201701 

這是不是我需要它的模式英寸

任何人都可以幫助我嗎?

回答

1

看看這裏。這是一個有點短感謝for循環

function getLast3Months() { 
 

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

 
    var today = new Date(); 
 
    var last3Months = [] 
 

 
    for (i = 0; i < 3; i++) { 
 
    last3Months.push(monthNames[(today.getMonth() - i)] + ' - ' +today.getFullYear() ); 
 
    } 
 
    return last3Months; 
 
} 
 

 
document.write(getLast3Months());

0

試試這個。加月份名稱爲一些array然後找到索引

function getLastMonths(n) { 
 
var m =['','Jan','Feb','Mar','Aprl','May','Jun','July','Aug','Sep','Oct','Nov','Dec']; 
 
    var months = new Array(); 
 

 
    var today = new Date(); 
 
    var year = today.getFullYear(); 
 
    var month = today.getMonth()+1; 
 

 
    var i = 0; 
 
    do { 
 
    months.push(m[parseInt((month > 9 ? "" : "0") + month)]+'-'+year); 
 
    if (month == 1) { 
 
     month = 12; 
 
     year--; 
 
    } else { 
 
     month--; 
 
    } 
 
    i++; 
 
    } while (i < n); 
 

 
    return months; 
 

 
} 
 
document.write(getLastMonths(4));

0

你要的數量手動轉換爲名稱由於不被JS內部公開姓名。

查看下面的工作示例。這將顯示您在下拉菜單中顯示的月份。

var monthNames = ["January", "February", "March", "April", "May", "June", 
 
     "July", "August", "September", "October", "November", "December" 
 
]; 
 
function getLastMonths(n) { 
 

 
    var months = new Array(); 
 

 
    var today = new Date(); 
 
    var year = today.getFullYear(); 
 
    var month = today.getMonth() + 1; 
 

 
    var i = 0; 
 
    do { 
 
     months.push(monthNames[month] + ' - ' + year); 
 
     if(month == 1) { 
 
      month = 12; 
 
      year--; 
 
     } else { 
 
      month--; 
 
     } 
 
     i++; 
 
    } while(i < n); 
 

 
    return months; 
 

 
} 
 

 
document.write(getLastMonths(4));

0

如何使用moment.js?

var getLastMonths = function(n) { 
 
    var arr = new Array(); 
 

 
    arr.push(moment().format('YYYY MM')); 
 

 
    for(var i=1; i< 3; i++){ 
 
    arr.push(moment().add(i*-1, 'Month').format('YYYY MM')); 
 
    } 
 
    
 
    return arr; 
 
} 
 

 
var appendOptions = function(arr) { 
 
    var html = ''; 
 
    
 
    for(var i=0; i<arr.length; i++) { 
 
    html += '<option value="' + arr[i] + '">' + arr[i] + '</option>' 
 
    } 
 

 
    document.getElementById('select-months').innerHTML = html; 
 

 
} 
 

 
var months = getLastMonths(4); 
 
appendOptions(months);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script> 
 

 
<select id="select-months"></select>

+1

或使用全角框架......有點奇怪提出了一個庫,東西容易,因爲這 – VikingCode

+0

@VikingCode爲什麼你覺得很奇怪?我對你的意見很感興趣。 – lv0gun9

+0

lib是一組工具,通常是一大組工具(讀取文件),您可以將其導入到項目中,以使代碼更簡單,並將功能封裝在正確的軟件中。但在這種情況下,導入一個庫沒有額外的價值。您可以在vanilla js中編寫較短的代碼,並且免除您不必管理的額外依賴項目。 – VikingCode

1

你可以不喜歡這樣。簡單地去從當前日期減去one month

function getLastMonths(n) { 
 
    var m =['January','February','March','April','May','June','July','August','September','October','November','December']; 
 
    var last_n_months =[] 
 
    var d = new Date() 
 
    for(var i=0;i<n;i++){ 
 
    last_n_months[i] = m[d.getMonth()]+ ' - ' + d.getFullYear().toString() 
 
    d.setMonth(d.getMonth()-1) 
 
    } 
 
    return last_n_months 
 
} 
 
console.log(getLastMonths(3))

+0

你的答案几乎與我的一樣,但返回5個月而不是3個問題。 – VikingCode

+0

@VikingCode正確!我只是看着它:) –