【前端 HTML+CSS+JavaScript(JS)】活了多少天计算器的实现 带注释/总结

效果:

在这里插入图片描述

代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<p>
			你的生日:
			<input type="text" size="4" id="year" ><input type="text" size="2" id="month"><input type="text" size="2" id="date"><input type="button" value="走你" onclick="getDays()">
			<input type="text" id="result">
		</p>
		<script type="text/javascript">
			
			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;
			}
		</script>
	</body>
</html>

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_小鹰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值