// 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);