问题描述:今天碰到这样一个问题“有两个日期下拉选择框,当选择其中一个日期时,自动给另一个日期赋值。例如,第一个日期选择为周一,另一个自动赋值为周日”。

分析:对于这样一个小功能,听起来并没有什么难点,所以就没有多想,但是等到真正实现的时候,突然发现涉及到日期加减值的时候,无形中就跟闰年、2月、31天月份、30天月份联系在一起了。虽然网上对于这样的问题随便一搜,就会有类似的现成代码,但是在这个过程之前,自己还是想动手写一下,权当消遣一下了。

设计:类似于这样一个独立的小功能,当然还是单独放到一个小方法里比较妥当了,输入为选择的日期(周一),输出为计算得到的日期(周日)。由周一的日期得到周日的日期,直接加上6就好了嘛,当然我们还是要具体考虑一下各种特殊的情况:

         1.判断年份是否是闰年,直接影响的就是2月份是28天,还是29天。我们小学就学过,能被4整除但不能被100整除的年份或者能被400整除的年份为闰年。

         2.判断月份是否是2月

         3.判断月份是30天还是31天,1、3、5、7、8、10、12月31天,4、6、9、11月30天。

         4.判断日期增长后是否跨越月份,若跨越月份,月份要加1。

         5.判断月份增长后是否跨越年份,若跨越年份,年份需要加1.

实现:综合以上分析,代码实现如下:

//给出周一的日期,返回本周周日的日期
    function GetSundayDate(mondayDate) {
        var isLeapYear, Myear, Mmonth, Mday, Syear, Smonth, Sday;
        isLeapYear = false;
        Myear=mondayDate.getFullYear();
        Mmonth=mondayDate.getMonth() + 1;
        Mday = mondayDate.getDate();
        Syear = Myear;
        Smonth = Mmonth;

        //1.首先判断是否是闰年
        if ((Myear%4==0 && Myear%100!=0)||Myear%100==0) {
            isLeapYear = true;
        }
        else {
            isLeapYear = false;
        }
        //2.判断是否2月
        if (Mmonth==2) {
            if (Mday < 23 || (Mday == 23 && isLeapYear)) { //周一日期小于2月23或者为闰年2月23号
                Sday = Mday + 6;
            }
            else if (isLeapYear) { //闰年
                Smonth = Mmonth+1;
                Sday = Mday + 6 - 29;
            }
            else {//非闰年
                Smonth = Mmonth+1;
                Sday = Mday + 6 - 28;
            }
        }
        else if (Mday <25) { //周日在本月
            Sday = Mday + 6;
        }
        else if(Mmonth==4||Mmonth==6||Mmonth==9||Mmonth==11){ //每月30天的月份,周日在下个月
            Smonth = Mmonth + 1;
            Sday = Mday + 6 - 30;
        }
        else if (Mday==25) { //每月31天的月份,周日仍在本月
            Sday = Mday + 6;
        }
        else {//每月31天的月份,周日在下个月
            Smonth = Mmonth + 1;
            Sday = Mday + 6 - 31;
        }
        //5.月份加后判断是否是12月,如果是,年份加1
        if (Smonth > 12) {
            Syear++;
            Smonth = 1;
        }
        
        return Syear + "-" + Smonth + "-" + Sday;
    }

 

版权声明:本文为xfq-sean原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/xfq-sean/p/5276870.html