簡體   English   中英

本月之前的Javascript getDate()

[英]Javascript getDate() before this month

我有一些純 javascript 日歷。 我的問題是我想在所選月份之前添加天數。

|so|mo|di|mi|do|fr|sa|
______________________
|29|30|31|1 |2 |3 | 4| <-- here 29,30,31
______________________
|5 |6 |.....

我希望我的意思很清楚。 這是我的腳本

<script type="text/javascript">
function Calendar(id, year, month) { 
  var elem = document.getElementById(id)

  var mon = month - 1  // (1)
  var d = new Date(year, mon)

  var table = ['<table><tr>']

  for (var i=0; i<d.getDay(); i++) {
    table.push('<td></td>')         // here days before this mounth
  }

  // main body (3)
  while(d.getMonth() == mon) {
    table.push('<td>'+d.getDate()+'</td>')

    if (d.getDay() % 7 == 6) {   // (4)
      table.push('</tr><tr>')
    }

    d.setDate(d.getDate()+1)  
  }

  n = 1
  for (var i=d.getDay(); i<8; i++) {

    table.push('<td>' + (n++) + '</td>')

  }

  table.push('</tr></table>')

  elem.innerHTML = table.join('\n')
}
new Calendar("cal", 2015, 9)
</script>

我嘗試使用 setDate() 但我沒有掌握它。

正如評論中提到的 setDate(和 Date 構造函數)可以有負值。 但是,您可以將 startdate 設置為一周的開始,並始終添加整周,而不是prepost循環:

function Calendar(id, year, month) { 
  var elem = document.getElementById(id)

  var mon = month - 1;  // (1)
  var d = new Date(year, mon, 1 );
  var start = 1-d.getDay();  

  var table = ['<table>'];
  while(d.getMonth() <= mon) {
      table.push('<tr>');
      for(var i =0 ; i< 7; i++){
          d = new Date(year,mon,start++);
          table.push('<td>'+d.getDate() + '</td>')
      }      
      table.push('</tr>');    
  }
  table.push('</table>')

  elem.innerHTML = table.join('\n')
}
new Calendar("cal", 2015, 9);

小提琴

編輯:一個替代版本,以防“其他”月份的顏色應該更淺:小提琴

Date對象具有方法.setDate()用於添加天數以獲取更新日期。

var someDate = new Date(2015, 06, 05); // (year, month, date)
console.log('old date : ' + someDate);
var numberOfDays = 6; // No of day add or remove. use negative sign for remove days
someDate.setDate(someDate.getDate() + numberOfDays); //date object with new date (new day, new month and new year)
console.log('new date : ' + someDate);

嘗試為您的月視圖定義開始和結束日期,並從開始到結束進行迭代。

var startDate = new Date(d);
var endDate = new Date(d.getFullYear(), d.getMonth() + 1, d.getDate() - 1);

while (startDate.getDay() != 0) {
    startDate.setDate(startDate.getDate() - 1);
}

while (endDate.getDay() != 6) {
    endDate.setDate(endDate.getDate() + 1);
}

我是這樣管理的:

  tmp = new Date(year, mon, 0).getDate() // return day of the last month
  for (var i=0; i<(d.getDay() + 6) % 7; i++) { // count days
    table.splice(1,0,'<td>'+(tmp-i)+'</td>') // adding days at first pos of table
  }

謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM