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

news/2024/7/10 2:11:24 标签: javascript, vue
javascript">/**
 * @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 + '天';
			}
		}
	}
}

http://www.niftyadmin.cn/n/1740803.html

相关文章

已知圆上任意两点求圆心和半径_寻动点轨迹,求几何最值难题

近些年的中考中&#xff0c;经常出现动点的运动轨迹类问题&#xff0c;通常出题以求出轨迹的长度或最值最为常见。很多考生碰到此类试题常常无所适从&#xff0c;不知该从何下手。其实初中阶段如遇求轨迹长度仅有2种类型&#xff1a;"直线型"和"圆弧型"(两…

vue + uniapp实现手机横屏弹幕

小程序&#xff0c;手持弹幕&#xff0c;输入文字之后&#xff0c;弹幕从右往左匀速划过&#xff0c;再次循环。 实现这个功能&#xff0c;首先建一个uniapp项目&#xff0c;建一个vue页面 <template><view class"danmu_bg"><view class"barrage…

一部分 数据 迁移_【全球LOGO快讯】互联网数据迁移公司推出新名称和徽标Cloud FastPath...

让数据迁移更简洁数据迁移&#xff0c;同步备份解决方案专家Cloud FastPath取消了原Tervela的名称&#xff0c;推出全新的徽标设计。更名的发布上还见证了该技术公司下一代基于云的软件的beta版本发布。“谨慎地迁移不只是标语。这说明了我们是谁。这就是驱动我们的动力。这是加…

7805和78l05可以代换吗_我喝一瓶啤酒,你喝一杯白酒,这样对比公平吗?看完你就明白了...

我喝一瓶啤酒&#xff0c;你喝一杯白酒&#xff0c;这样对比公平吗&#xff1f;看完你就明白了。夏天到了&#xff0c;夜市摊和烧烤摊开始活跃起来&#xff0c;大家都开始喝啤酒&#xff0c;尤其是在闷热的傍晚&#xff0c;来一杯冰啤酒&#xff0c;是一件惬意的事情。夏天几个…

java mongo 去重_两年经验字节Java岗社招面试经历总结分享

走过路过不要错过点击蓝字关注我们往期全套面试题答案领取方式&#xff1a;关注公众号【Java烂猪皮】后台回复【666】一面1、介绍一下自己, 为什么选择出来看看机会2、聊项目, 警报怎么做的, 统一接入监控项怎么做的3、聊项目, 配置中心项目, 问实时配置推送怎么做4、讨论为什么…

java+sql server花店管理系统_管理系统模板开发详细教程

序言继上一篇 一套管理系统基础模版详细梳理一下安装流程&#xff0c;功能说明&#xff0c;开发规范等。后端项目结构&#xff1f;如何从零搭建环境开发&#xff1f;如何打包部署&#xff1f;接入开发及规范项目地址小结后端项目结构​ shop-server 依赖以下项目https://github…

ios 画带有箭头的线_针对iOS平台取证研究的iPhone设置(下)

针对iOS平台取证研究的iPhone设置(上)checkra1n越狱方法checkra1n越狱是基于checkm8引导ROM利用的半捆绑式越狱&#xff0c;该checkm8漏洞已于2019年9月发现并被公布。它揭示了一个漏洞&#xff0c;该漏洞实质上允许越狱访问iPhone 5s&#xff0c;iPhone 6&#xff0c;iPhone 6…

洛阳地铁一号线无人驾驶_刚刚!洛阳地铁1号线首列车辆下线!(高清图+视频)...

20日上午洛阳地铁1号线建设再迎重大节点1号线首列地铁车辆下线交接洛阳地铁1号线列车采用B型车&#xff0c;每列由6节编组&#xff0c;设计时速80公里&#xff0c;定员1460人&#xff0c;最大载客量2062人。洛阳市轨道交通集团相关负责人介绍&#xff0c;洛阳地铁1号线的车辆具…