输入你的生日某年某月某日,判断这一天是这一年的第几天、星期几?

 输入你的生日某年某月某日,判断这一天是这一年的第几天、星期几?
 
birth对象中包含输入的人的出生年月日数据。
  // birth对象中包含输入的人的出生年月日数据。
  6     var birth = {
  7       year: 2003,
  8       month: 7,
  9       date: 30
 10     };

参考代码:(参考代码很可能存在什么问题,该如何优化?)

  1   /* 输入你的生日某年某月某日,判断这一天是这一年的第几天、星期几? */
  2 
  3    /* 可以扩展为查询古人出生日是星期几 */
  4 
  5     // birth对象中包含输入的人的出生年月日数据。
  6     var birth = {
  7       year: 2003,
  8       month: 7,
  9       date: 30
 10     };
 11 
 12     // 判断年份是否是闰年
 13     function leapYear(year) {
 14       var cond1 = year % 4 == 0;
 15       var cond2 = year % 100 != 0;
 16       var cond3 = year % 400 == 0;
 17       //false为平年,true为闰年
 18       if (cond1 && cond2 || cond3) {
 19         return true;
 20       } else {
 21         return false;
 22       }
 23     }
 24     // 判断某年某月某日是该年的第几天
 25     function numDay(year, month, date) {
 26       var leapNumber = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; //闰年每月天数
 27       var commonNumber = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; //平年每月天数
 28       var num = 0;
 29       if (leapYear(year)) {
 30         for (var i = 0; i < month - 1; i++) {
 31           num += leapNumber[i];
 32         }
 33       } else {
 34         for (var i = 0; i < month - 1; i++) {
 35           num += commonNumber[i];
 36         }
 37       }
 38       num += date;
 39       return num;
 40 
 41     }
 42     var a=numDay(birth.year, birth.month, birth.date);
 43 
 44     console.log('你在当年的第'+a+'天出生');
 45 
 46 
 47     // 获取当天的date对象
 48     var now = {
 49       year: new Date().getFullYear(),
 50       month: new Date().getMonth() + 1,
 51       date: new Date().getDate(),
 52       week: new Date().getDay()
 53     }
 54     // birthDay为出生年的第几天,nowDay为今年的第几天,middleDay为中间间隔年共计的天数
 55     var birthDay = numDay(birth.year, birth.month, birth.date);
 56     var nowDay = numDay(now.year, now.month, now.date);
 57     var middleDay = 0;
 58     var arr = [];
 59     var result = 0;
 60     if (birth.year < now.year) {
 61       // 如果今年不是出生年
 62       //birthDay为出生时到岁末的天数
 63       if (leapYear(birth.year)) {
 64         birthDay = 366 - birthDay;
 65       } else {
 66         birthDay = 365 - birthDay;
 67       }
 68 
 69       for (var i = birth.year + 1; i < now.year; i++) {
 70         if (leapYear(i)) {
 71           arr.push(366);
 72         } else {
 73           arr.push(365);
 74         }
 75       }
 76       for (var i = 0; i < arr.length; i++) {
 77         middleDay += arr[i];
 78       }
 79       console.log(middleDay);
 80       result = birthDay + middleDay + nowDay;
 81     } else if (birth.year == now.year) {
 82       // 如果今年是出生年
 83       result = numDay(now.year, now.month, now.date) - numDay(birth.year, birth.month, birth.date);
 84 
 85     } else {
 86       alter('出生日期不能迟于当前日期');
 87     }
 88 
 89     result %= 7;
 90 
 91     /* 如何根据余数来判断星期几?
 92      *可以视为周期为7的周期函数,f(n)=f(n-7),在当前日期的基础上,向前推余数的天数,即可获得那天的星期
 93      * 
 94      */
 95     if (now.week - result < 0) {
 96       birth.week = now.week - result + 7;
 97 
 98     } else {
 99       birth.week = now.week - result;
100     }
101     console.log('今天' + now.week);
102     console.log(birth.week);
103     switch (birth.week) {
104       case 0:
105         console.log('星期日')
106         break;
107       case 1:
108         console.log('星期一')
109         break;
110       case 2:
111         console.log('星期二')
112         break;
113       case 3:
114         console.log('星期三')
115         break;
116       case 4:
117         console.log('星期四')
118         break;
119       case 5:
120         console.log('星期五')
121         break;
122       case 6:
123         console.log('星期六')
124         break;
125       default:
126         console.log('出现错误');
127     }
128 
129     console.log(result);

 

 
 

 

posted @ 2020-07-30 18:26  请叫我二狗哥  阅读(931)  评论(0编辑  收藏  举报