1.首先取得处理月的总天数 JS不提供此参数,我们需要计算。考虑到闰年问题会影响二月份的天数,我们先编写一个判断闰年的自编函数:

//判断是否为闰年
function is_leap(year) {
    //闰年的条件是符合下面二者之一:
    //(1)年份能被4整除,但不能被100整除;
    //(2)年份能被400整除。
    if((year%4==0 && year%100!=0)||(year%400==0)){
        return 1;
    }
    return 0;
}

2.十二个月内的月份总天数的数组:

days_of_month = new Array(31, 28+is_leap(fullYear), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); 

3.计算处理月第一天是星期几

date=new Date(2008, 3, 1);
week=date.getDay();

4.解决 日期显示 行数问题

rows=Math.ceil((days_of_month[month] + week) / 7);

5. 总的来说用到的参数

 //判断是否为闰年
        function is_leap(year) {
            //闰年的条件是符合下面二者之一:
            //(1)年份能被4整除,但不能被100整除;
            //(2)年份能被400整除。
            if((year%4==0 && year%100!=0)||(year%400==0)){
                return 1;
            }
            return 0;
        }
        
        //var date = new Date(2013, 1, 4); //特定Date资讯
        var date = new Date(); //当前Date资讯
        var fullYear = date.getFullYear(); //获取年份
        var month = date.getMonth(); //获取月份,返回值是0(一月)到11(十二月)之间的一个整数。
        var date_of_month = date.getDate(); //获取日期,返回值是1~31之间的一个整数
        var first_date = new Date(fullYear, month, 1); //获取当前月第一天Date资讯
        //返回date对象星期中的一天,此值为0(周日)-6(周六)之间的一个整数
        var week = first_date.getDay(); //获取当前月第一天是星期几
        var days_of_month = new Array(31, 28+is_leap(fullYear), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); //各月份的总天数
        var rows = Math.ceil((days_of_month[month] + week) / 7); //表格所需要行数

  转载自:https://www.cnblogs.com/linjiqin/p/3564883.html 感谢!

  组件化请参看:https://www.jianshu.com/p/0831d6035e7b