js 计算两个日期格式字符串相差几年几个也几天

11 篇文章 0 订阅
6 篇文章 0 订阅
/**
 * @desc 计算年龄
 * 计算年份->计算月份->计算天数
 */
export const getDiffYmdBetweenDate = (sDate1, sDate2) => {
	var fixDate = function(sDate) {
		var aD = sDate.split('-');
		for (var i = 0; i < aD.length; i++) {
			aD[i] = fixZero(parseInt(aD[i]));
		}
		return aD.join('-');
	};
	var fixZero = function(n) {
		return n < 10 ? '0' + n : n;
	};
	var fixInt = function(a) {
		for (var i = 0; i < a.length; i++) {
			a[i] = parseInt(a[i]);
		}
		return a;
	};
	var getMonthDays = function(y, m) {
		var aMonthDays = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
		if ((y % 400 == 0) || (y % 4 == 0 && y % 100 != 0)) {
			aMonthDays[2] = 29;
		}
		return aMonthDays[m];
	};
	var checkDate = function(sDate) {};
	var y = 0;
	var m = 0;
	var d = 0;
	var sTmp;
	var aTmp;
	sDate1 = fixDate(sDate1);
	sDate2 = fixDate(sDate2);
	if (sDate1 > sDate2) {
		sTmp = sDate2;
		sDate2 = sDate1;
		sDate1 = sTmp;
	}
	var aDate1 = sDate1.split('-');
	aDate1 = fixInt(aDate1);
	var aDate2 = sDate2.split('-');
	aDate2 = fixInt(aDate2);
	y = aDate2[0] - aDate1[0];
	if (sDate2.replace(aDate2[0], '') < sDate1.replace(aDate1[0], '')) {
		y = y - 1;
	}
	//计算月份
	aTmp = [aDate1[0] + y, aDate1[1], fixZero(aDate1[2])];
	while (true) {
		if (aTmp[1] == 12) {
			aTmp[0]++;
			aTmp[1] = 1;
		} else {
			aTmp[1]++;
		}
		if (([aTmp[0], fixZero(aTmp[1]), aTmp[2]]).join('-') <= sDate2) {
			m++;
		} else {
			break;
		}
	}
	//计算天数
	aTmp = [aDate1[0] + y, aDate1[1] + m, aDate1[2]];
	if (aTmp[1] > 12) {
		aTmp[0]++;
		aTmp[1] -= 12;
	}
	while (true) {
		if (aTmp[2] == getMonthDays(aTmp[0], aTmp[1])) {
			if (aTmp[1] == 12) {
				aTmp[0]++;
				aTmp[1] = 1;
				aTmp[2] = 1;
			} else {
				aTmp[1]++;
				aTmp[2] = 1;
			}
		} else {
			aTmp[2]++;
		}
		sTmp = ([aTmp[0], fixZero(aTmp[1]), fixZero(aTmp[2])]).join('-');
		if (sTmp <= sDate2) {
			d++;
		} else {
			break;
		}
	}
	
	// 返回多少年多少月多少天
	if(y == 0){
		if(m == 0){
			if(d == 0){
				return '就是今天';
			}else{
				return d + '天';
			}
		}else{
			if(d == 0){
				return '刚好' + m + '个月';
			}else{
				return m + '个月' + d + '天';
			}
		}
	}else{
		if(m == 0){
			if(d == 0){
				return '刚好' + y + '年';
			}else{
				return y + '年' + d + '天';
			}
		}else{
			if(d == 0){
				return '刚好' + y + '年' + m + '个月';
			}else{
				return y + '年' + m + '个月' + d + '天';
			}
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值