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

根据自己输入出生年月日,然后得到对应的是该年的第几天。
我们都知道年分为平年和闰年,闰年的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>

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值