js 判断一年中的第几天

本文介绍了一种计算特定日期是一年中第几天的三种方法,包括如何判断闰年和处理不同月份天数的算法。同时,文章还提供了代码实现,展示了如何使用JavaScript进行日期计算。

按 YYYY-MM-DD 格式表示日期的字符串date,计算并返回该日期是当年的第几天

注意点:

  1. 对输入函数的时间字符串进行处理
  2. 判断当前年份是否闰年
  3. 判断用户输入的时间格式是否正确

判断闰年的方法:能被 4 整除但不能被 100 整除是闰年,能被 400 整除是闰年

  • 方法1
function getDays(date){
	let ymd = date.split('-');
	let y = +ymd[0],//字符串转数字
		m = +ymd[1],
		d = +ymd[2];
	let num = 0;
	for(let i = 1; i <= m; i++){
		switch(i){
			case 1:
				num += d;
				break;
			case 2:
				num += (((y%4==0 && y%100!=0) || y%400==0)?29:28);
				break;
			case 3:
			case 5:
			case 7:
			case 8:
			case 10:
			case 12:
				num += 31;
				break;
			case 4:
			case 6:
			case 9:
			case 11:
				num += 30;
				break;
		}
	}			
	return num;
}
  • 方法2
function getDays(date){
	let ymd = date.split('-');
	let y = +ymd[0],//字符串转数字
		m = +ymd[1],
		d = +ymd[2];
	let num = 0;
	m>1 && (num+=31);
	m>2 && (num+=(((y%4==0 && y%100!=0) || y%400==0) ? 29 : 28))
	m>3 && (num+=31);
	m>4 && (num+=30);
	m>5 && (num+=31);
	m>6 && (num+=30);
	m>7 && (num+=31);
	m>8 && (num+=31);
	m>9 && (num+=30);
	m>10 && (num+=31);
	m>11 && (num+=30);
	num = num+d;
	
	return num;
}

前两种方法虽然能正确算出结果,但没有办法判断输入的时间格式是否正确

所以在第二种方法的基础上又做了一些判断

  • 方法3
function getDays(date){
	let ymd = date.split('-');
	let y = +ymd[0],//字符串转数字
		m = +ymd[1],
		d = +ymd[2];
	let num = 0;
	if(y<=0) return "输入年份格式错误";
	if(m<=0||m>12) return "输入月份格式错误";
	if(d<=0||d>31) return "输入日期格式错误";
		if((m==2&&d==30)||(m==2&&d==31)) return "2月没有30或31天,请重新输入";
	if(((m<=7&&m%2==0) || (m>=8&&m%2!=0)) && d>30) return "当前月份只有30天,请重新输入";
	m>1 && (num+=31);
	m>2 && (num+=(((y%4==0 && y%100!=0) || y%400==0) ? 29 : 28))
	m>3 && (num+=31);
	m>4 && (num+=30);
	m>5 && (num+=31);
	m>6 && (num+=30);
	m>7 && (num+=31);
	m>8 && (num+=31);
	m>9 && (num+=30);
	m>10 && (num+=31);
	m>11 && (num+=30);
	num = num + d;
	return num;
}

//调用方式
getDays("2000-12-31");//366
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值