1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > JS 获取合同的起始时间与终止时间------日期增加自然月 年。

JS 获取合同的起始时间与终止时间------日期增加自然月 年。

时间:2020-05-18 22:07:22

相关推荐

JS 获取合同的起始时间与终止时间------日期增加自然月 年。

需求: 在线签订电子合同;

获取合同的起始时间与终止时间,以用户点击签约为起始时间,计算用户在页面中选择的合约生效时长(可选6个月、1年等等)并推算出终止时间;

实现难点: 可能存在大月小月以及平年闰年时二月的天数转换问题(例如:用户在11月30号签约,选择合约生效时长为6个月,按我接到的需求这里应该设置终止时间为-02-28);(一、结束时间为合同到期前一天)

我用的ant-design-vue(v2版本的时间选择器)

setEndDate(time,b) {if(!this.valueTime[0]){//valueTime是一个时间数组,valueTime[0]是开始时间 valueTime[1]是结束时间this.$message.error('请选择日期')};let a = this.SetMonth(time, b);this.valueTime[1]=a;console.log(a);},SetMonth(date, monthNum){let date1= new Date(date)var day = date1.getDate();var month = date1.getMonth()+1;var year = date1.getFullYear();var days = new Date(year, month, 0);days = days.getDate(); //获取当前日期中的月的天数var year2 = year;var month2 = parseInt(month) + parseInt(monthNum);if (month2 > 12) {year2 = parseInt(year2) + parseInt((parseInt(month2) / 12 == 0 ? 1 : parseInt(month2) / 12));month2 = parseInt(month2) % 12;if(month2 == 0) {// 正好被12整除 12月month2 = 12;year2-- ;}}var days2 = new Date(year2, month2, 0);days2 = days2.getDate();let year2IsR = (year2 % 4 == 0 && year2 % 100 != 0 || year2 % 400==0);let yearIsR = (year % 4 == 0 && year % 100 != 0 || year % 400 == 0);// debugger// 如果开始日期大月 31号 结束日期是小月if((month2 == 4 || month2 == 6 || month2 == 9 || month2 == 11) && day == 31) {day = 30;}if((day == 31 || day == 30 ) && month2 == 2) {// 判断 是否闰年if(year2IsR) {// day = 29;day = 30;} else {// day = 28;day = 29;}} else if(day == 29 && month2 == 2) {// day = 28;day = 29;}// debuggerif (month2 < 10) {month2 = '0' + month2;}if (day < 10) {day = '0' + day;}var endDate = year2 + '-' + month2 + '-' + day;return this.GetDateStr(endDate, -1);},GetDateStr(dateStr,AddDayCount) {var dd = new Date(dateStr);dd.setDate(dd.getDate()+AddDayCount);//获取AddDayCount天后的日期var y = dd.getFullYear();var m = (dd.getMonth()+1)<10?"0"+(dd.getMonth()+1):(dd.getMonth()+1);//获取当前月份的日期,不足10补0var d = dd.getDate()<10?"0"+dd.getDate():dd.getDate();//获取当前几号,不足10补0return y+"-"+m+"-"+d;},

二、还有一种需求。结束时间为合同到期当天。

timeTransformation(time,num) {// console.log(time)let date= new Date(time)// console.log(num)console.log(date)let day = date.getDate();let month = date.getMonth();let year = date.getFullYear();// console.log(day)// console.log(month+1)// console.log(year)//如果需要精确到时分秒// dateArr = this.dateFormmat(date,'yyyy-MM-dd hh:mm:ss').split(' ');year = year + parseInt((Number(month) + Number(num)) / 12);month = (Number(month) + Number(num)) % 12;//0-11 转变为 1-12month += 1;// 大月31天,小月30天,2月份只有28天(平年)或29天(闰年)// 每年一﹑三﹑五﹑七﹑八﹑十﹑十二这七个月为大月,均三十一天switch(month){case 1 :case 3 :case 5 :case 7 :case 8 :case 10 :case 12 :day > 31 ? day = 31 : '';break;case 4 :case 6 :case 9 :case 11 :day > 30 ? day = 30 : '';break;case 2 :this.isLeapYear(year) ? (day > 29 ? day = 29 : '') : (day > 28 ? day = 28 : ''); break;default : break;}month < 10 ? (month = '0' + month) : '';day < 10 ? (day = '0' + day) : '';// let a=year + '-' + month + '-' + day + ' ' + dateArr[1];let a=year + '-' + month + '-' + day ;console.log(a);// return year + '-' + month + '-' + day + ' ' + dateArr[1];return year + '-' + month + '-' + day;},dateFormmat(date, format){console.log(date)console.log(format)if(null==date){return ''}if(typeof(date)=='string' || typeof date === 'number'){date = (typeof date === 'number') ? new Date(date) : new Date((date || '').replace(/-/g, '/'))}var o = {"M+" : date.getMonth()+1, //month "d+" : date.getDate(), //day "h+" : date.getHours(), //hour "m+" : date.getMinutes(), //minute "s+" : date.getSeconds(), //second "q+" : Math.floor((date.getMonth()+3)/3), //quarter "S" : date.getMilliseconds() //millisecond } if(/(y+)/.test(format)) {format = format.replace(RegExp.$1, (date.getFullYear()+"").substr(4 - RegExp.$1.length)); } for(var k in o) {if(new RegExp("("+ k +")").test(format)) {format = format.replace(RegExp.$1, RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length)); } } console.log(format)return format; },isLeapYear(year) {// 普通闰年:公历年份是4的倍数的,且不是100的倍数,为普通闰年。(如就是闰年)// 世纪闰年:公历年份是整百数的,必须是400的倍数才是世纪闰年(如1900年不是世纪闰年,2000年是世纪闰年)return ((year % 4 == 0) && (year % 100 != 0)) ? true : ((year % 400) == 0) ? true : false;},

第二种写法,参考链接: 参考

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。