此月之前的Javascript getDate()

此月之前的Javascript getDate(),javascript,html,Javascript,Html,我有一些纯javascript日历。 我的问题是,我想添加所选月份之前的天数 |so|mo|di|mi|do|fr|sa| ______________________ |29|30|31|1 |2 |3 | 4| <-- here 29,30,31 ______________________ |5 |6 |..... | so | mo | di | mi | do | fr | sa| ______________________ |29 | 30 | 31 | 1 | 2 | 3

我有一些纯javascript日历。 我的问题是,我想添加所选月份之前的天数

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

|29 | 30 | 31 | 1 | 2 | 3 | 4 |
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);

如注释中所述,setDate(和日期构造函数)可以有负值。但是,您可以将startdate设置为一周的开始,并始终添加整周,而不是
pre
post
循环:

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);
功能日历(id、年、月){
var elem=document.getElementById(id)
var mon=第1个月;//(1)
var d=新日期(年、月、日);
var start=1-d.getDay();
var表=[''];

而(d.getMonth()尝试为月份视图定义开始和结束日期,并从开始到结束迭代

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
  }
tmp=新日期(年,周一,0).getDate()//上个月的返回日期

对于(var i=0;iYou可以使用负数调用
.setDate()
,以获取上个月的最后几天,使用大于30(或31或任何数字)的数字来获取下个月的第一天。旁注:不要使用表达式(例如
d.getDay()
)在循环条件下。它将在每次循环迭代时进行计算。因此最好将表达式的值存储在变量中。非常感谢…也可以在周一开始吗?不客气:)。当然,我重用了当前的设置,但要在周一开始,只需使用
var start=2-d.getDay();
()
  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
  }