首页 > 网站 > WEB开发 > 正文

根据出生日期得到是该年的第几天,带一点算法,不用一个月份一个月份的加

2024-04-27 15:04:40
字体:
来源:转载
供稿:网友
根据自己输入出生年月日,然后得到对应的是该年的第几天。
我们都知道年分为平年和闰年,闰年的2月份为29天,平年的2月份为28天。平年和闰年的判断为:可被4整除,但是整百的年数必须是可以被400整除的才是闰年。用代码表示就是(year%4==0 && year%100!=0 || year%400==0)为true的时候,就是闰年。
接着7、8月份的问题,因为7、8月份都是31天,如果我们不想一个月一个月的取值得话,那就可以这样:
首先我们可以假设2月份有30天,然后进行一个闰年或者平年的判断,对天数进行-1或者-2操作。经过发现,1-7月份,如果按照31天计为大,30天计为小,那么1-7月份就可以表示为:大小大小大小大,然后8-12月份,也可以表示为大小大小大。相当于就是7月和8月作为一个分界线,我们通过计算有多少个31天多少个30天得到最后的答案。
接着我们进行一个月份的判定,如果月份小于或者等于8月(为什要等于8月份呢,因为等于8月份,那么7月就是完整的31天,然后加上对应的天数就行了,如果只是小于8月份,那么最多只能是7月份的最后一天,分界的后面一部分就相应的变为7-12,就成为了大大小大小大,规律就不好找了)(更浅显地说就是7月8月作为一个分界线,当前月不能在总的天数上加30或者31,只能加对应输入的号数;举个例子:如果我输入1996 2 1,那么我只能是加前一个到一月份对应的天数,再加当前月份的日期,即就是只能加上一月份的31天,然后再加二月份的日期1)。
如果当前月是小于等于8,先计算出有多少个31天的月份(不包括本月),使用(当前月-1)/2,然后向上取整(1.2就变成2),就能得到有31天的月份数量,再计算有30天的月份数,(当前月-1)/2,向下取整(1.8变成1)。最后在判断输入的月份大于2的话,就要对当前的月份进行-1或者-2的处理,反之不用处理。
如果当前月是大于8,先计算出有多少个31天的月份(不包括本月),使用(当前月-8)/2,然后向上取整(1.2就变成2)再加上4(因为之前1-7月份,就有4个31天),就能得到有31天的月份数量,再计算有30天的月份数,(当前月-8)/2,向下取整(1.8变成1),最后加上3(因为之前1-7月份,就有3个30天)。最后就要对当前的月份进行-1或者-2的处理。
 
 
源代码如下:
<!DOCTYPE html><html lang="en"><head>	<meta charset="UTF-8">	<title>Document</title></head><body>	<script>		var year=0,			month=0,			day=0;		//riqi函数用于将出生日期转换为对应年份的天数		function riqi(year1,month1,day1){			var total=0;			var num1=0;			var num2=0;			if(month1<=8){				num1=Math.ceil((month1-1)/2);				total=num1*31;				num1=Math.floor((month1-1)/2);				total+=num1*30;			}else{				num2+=(Math.ceil((month1-8)/2)+4);				total=num2*31;				num2=(Math.floor((month1-8)/2)+3);				total+=num2*30;			}			if(month1>2){				if(year1%4==0 && year1%100!=0 || year1%400==0){					--total;				}else{					total-=2;				}			}						document.write("您的生日是"+year1+"年的第"+(total+day1)+"天"+"</br>");		}		//ymd函数用于出生日期的获取		function ymd(){			year=parseInt(PRompt("请输入您的出生年份"));			month=parseInt(prompt("请输入您的出生月份"));			day=parseInt(prompt("请输入您的出生日期"));		}		ymd();		riqi(year,month,day);	</script></body></html>
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表