Date类型

最近写了一个calendar程序,遇到了很多问题,下面我列出一些个人认为很有意思,也值得思考的问题,供大家参考。

注:每一个问题我给出的方法也许不是最好的方法,若有更好的方法,希望大牛来补充完善。

问题一:给定一个日期,如何获取该月的总天数。

方法一:hack技巧

思路:

var date = new Date(2017,1,0);

变量date表示的是2017年2月第0天,也就是1月的最后一天31号,以此类推。

代码:

        function getSumDay(date) {
            var day = new Date(date.getFullYear(), date.getMonth() + 1, 0);
            return day.getDate();
        }

方法二:常规思路

思路:

从该月第一天开始+1,当日期的月份和该月不等时,记录增加的次数,这个数值就是该月的天数。

代码:

        function getSumDay(date) {
            var dayNumber = 1; //初始化日号
            var monthNumber = date.getMonth(); //月号
            var sum = 0;

            //给新日期初始化
            var newDate = new Date(date.setDate(1));

            //只要月份相等,说明还在该月中,继续循环,直到下一个月
            for (var newMonthNumber = newDate.getMonth(); newMonthNumber == monthNumber; ++dayNumber) {
                newDate = new Date(newDate.setDate(dayNumber));
                newMonthNumber = newDate.getMonth();
                ++sum;
            }
            return sum - 1;
        }

方法三:hack方法

思路:因为一个月没有第32天,而setDate(day)中如果传入的day大于该月的天数,那么会自动进入下一个月。

代码:

        function getSumDay(year,month){
            return 32-new Data(year,month,32).getData();
        }

        alert(getSumDay(2017,2));
原文地址:https://www.cnblogs.com/lijy/p/6284457.html