首页 > 其他分享 >js 计算两个日期格式字符串相差几年几个也几天

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

时间:2023-01-05 11:59:09浏览次数:45  
标签:aDate1 sDate2 sDate1 ++ aTmp js var 字符串 格式

/**
 * @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 + '天';
			}
		}
	}
}

标签:aDate1,sDate2,sDate1,++,aTmp,js,var,字符串,格式
From: https://www.cnblogs.com/Fantasyfzg/p/17027113.html

相关文章

  • JS date转成字符串(格式:yyyy-MM-dd)
    /***@description将date转为字符串:yyyy-MM-dd格式*@authorfzg*/exportconstdateToString=(date)=>{ varY=date.getFullYear(); varM=date.getMon......
  • JS date转字符串(格式:yyyy-MM-dd HH:mm:ss)
    /***@description将date转为字符串:yyyy-MM-ddHH:mm:ss格式*@authorfzg*/exportconstformatDate=(date)=>{ varY=date.getFullYear(); varM=date......
  • nodejs安装在D盘
    前提条件node安装D盘:D:\nodejs,最开始安装在D:\ProgramFiles\nodejs,但是yarn的使用遇到了一些报错。npm设置在nodejs文件夹下创建node_global和node_cache两个文......
  • 【栈】LeetCode 1209. 删除字符串中的所有相邻重复项 II
    题目链接1209.删除字符串中的所有相邻重复项II思路用栈存储Pair<Character,Integer>,整数表示该字符连续出现的次数。遍历字符串s将其中的字符c依次压入栈顶并......
  • (MFC)c++字符串相加问题
    在使用CString对象进行相加时,会出现CStringc=CStringA+CStringB;时c只为A,或者B的情况,这种情况不是每次都有的,可以通过每次相加之前releasebuffer的方式来释放缓冲区,......
  • 字符串拆分----split()关键字
    字符串概念字符串主要用于编程,概念说明、函数解释、用法详述见正文,这里补充一点:字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的,如s="abcdefghij",则s[1]="......
  • ExtJS-UI组件-TreePanel
    ExtJS教程汇总:https://www.cnblogs.com/cqpanda/p/16328016.html转载请注明出处:https://www.cnblogs.com/cqpanda/p/16587500.html更新记录2023年1月2日从笔记迁移到......
  • HDFS存储格式及压缩算法
    存储格式1SequenceFile以二进制键值对的形式存储数据,支持三种记录存储方式。.无压缩:io效率较差,相比压缩,不压缩的情况下没有什么优势。记录级压缩:对每条记录都压缩,这种......
  • js 判断数组是否有重复数据
    博客链接:https://www.cnblogs.com/jameshappy/archive/2013/07/22/3207404.html在vue项目我用的是第二种方法letlist=dataList.map((d)=>d.khId+d.productCode);......
  • 微信支付--JSAPI支付(微信小程序和微信公众号支付都可以采用该方式)
    本实例使用了工具包SKIT.FlurlHttpClient.Wechat.TenpayV3(github:https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat)示例中的_repositoryWrapper的相关......