【前端 HTML+CSS+JavaScript(JS)】活了多少天计算器的实现 带注释/总结
腊梅5朵
关注 阅读 28
2022-02-14
效果:
代码:
你的生日:
年
月
日
var flag; //判闰年标志位
var m_flag;
function getDays(){
var year = document.getElementById("year").value;
var month = document.getElementById("month").value;
var date = document.getElementById("date").value;
// 检验数据格式是否正确
if(!checkBirth(year,month,date)){
return;
}
var total = 0;
total += eval(getDaysOfBirthYear(year,month,date))+eval(getDaysOfYears(year))+eval(getDaysOfNow(year,month,date));
document.getElementById("result").value="你已经活了"+parseInt(total)+"天了";
}
// ----已经实现,提供给你用的函数 -----
// 获取当前的年份
function getNowYear(){
return new Date().getFullYear();
}
// 获取当前的月份
function getNowMonth(){
return new Date().getMonth()+1;
}
// 获取当前的日期
function getNowDate(){
return new Date().getDate();
}
// -------下面是你要实现的函数 -------------
// 检验数据格式
function checkBirth(year,month,date){
// 在这里检查year是否是1900年以后的。如果不是return false
// 检查month是否是1~12之间,如果不是 return false
// 检查date是否是当前月的日期以内的(大月1~31,小月1~30,2月 1~28或者1~29) 如果不是return false
flag = 0;
m_flag = 0;
year = parseInt(year);
month = parseInt(month);
date = parseInt(date);
flag = year%4 == 0 && year%100 != 0 || year%400 == 0;
if(year < 1900 || !(month >= 1 && month <=12))
return false;
switch(month){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
m_flag = 1;
if(!(date >= 1 && date <=31))
return false;
break;
case 4: case 6: case 9: case 11:
m_flag = 2;
if(!(date >= 1 && date <=30))
return false;
break;
case 2:
if(flag) //flag=1时是闰年
m_flag = 3;
if(!(date >= 1 && date <=29))
return false;
else
m_flag = 4;
if(!(date >= 1 && date <=28))
return false;
break;
}
return true;
}
// 根据传入的年份和月份得到当年当月的总天数
function getDaysOfMonth(year,month){
// 参考昨天的作业实现
// 最终返回总天数
year = parseInt(year);
month = parseInt(month);
var birthYearBirthMonth_days = 0; //当年当月天数
switch(m_flag){
case 1: birthYearBirthMonth_days = 31; break;
case 2: birthYearBirthMonth_days = 30; break;
case 3: birthYearBirthMonth_days = 29; break;
case 4: birthYearBirthMonth_days = 28; break;
}
return birthYearBirthMonth_days;
}
// 根据传入的年月日,计算这一年还剩多少天
function getDaysOfBirthYear(year,month,c){
var thisYearDays;
var thisMonthDays;
var days = 0;
// 判断year是否是闰年
// 根据data计算month这个月还剩多少天。并且加到days上。
// 循环的把month后面剩下的几个月的天数全部加上去。
// 最后返回days。
year = parseInt(year);
month = parseInt(month);
date = eval(c);
if(year == getNowYear()){ //你是今年出生的,只需要算今年过去多少天就行了
return 0;
}
days = getDaysOfMonth(year,month) - c;
for(var i = month + 1; i <= 12; i++){
switch(i){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
days += 31;
break;
case 4: case 6: case 9: case 11:
days += 30;
break;
case 2:
if(flag) //flag=1时是闰年
days += 29;
else
days += 28;
break;
}
}
return days;
}
// 根据传入的年份,计算传入年份到今年之前的总天数
function getDaysOfYears(year){
var days = 0;
// 循环从year开始,到 getNowYear()结束。
var everyYear_flag = 0;
year = parseInt(year) + 1;
for(year ; year < getNowYear();year ++){
everyYear_flag = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
if(everyYear_flag){
days +=366;
}else{
days +=365;
}
}
return days;
// 最后返回days
}
// 计算今年过去了多少天
function getDaysOfNow(year, month, date){
var a,b,c;
var aliveYearFlag = 0;
var days = 0;
a = getNowYear();
b = getNowMonth();
c = getNowDate();
aliveYearFlag = a % 4 == 0 && a % 100 != 0 || a % 400 == 0; //判当前年是否为闰年
for(var i = 1; i < b; i++){
switch(i){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
days += 31;
break;
case 4: case 6: case 9: case 11:
days += 30;
break;
case 2:
if(aliveYearFlag) //flag=1时是闰年
days += 29;
else
days += 28;
break;
}
}
if(year == a && month == b){
days = c - date;
return days;
}
else if(year == a && month > b || year == a && month == b && date > c){
return 0;
}
days += c ;
return days;
}