填报表自动计算俩日期相差月份精确到小数位
在填报表设计过程中可以通过自动计算调用 js 来实现俩个日期相差的月份;
例如:2018-8-16 和 2018-9-16 计算出来应该是一个月,2018-8-16 和 2018-9-17,计算出来应该是两个月。
如果想要再具体到相差几个月的小数位应该怎么实现呢?
实现方法:
在展示页面的 jsp 编写 javascript 代码:
<script language="javascript">
function calculateMonth(contractStartDate, contractEndDate) {
const startFullMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
const endFullMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
const startDate = new Date(contractStartDate);
const endDate = new Date(contractEndDate);
// 开始日期参数
const startYear = startDate.getFullYear();
const startMonth = startDate.getMonth();
const startDay = startDate.getDate();
// 结束日期参数
const endYear = endDate.getFullYear();
const endMonth = endDate.getMonth();
const endDay = endDate.getDate();
// 判断开始日期是否为闰年
if (startYear % 4 === 0 && startYear % 400 !== 0) {
startFullMonth[1] = 29;
}
// 判断结束日期是否为闰年
if (endYear % 4 === 0 && endYear % 400 !== 0) {
endFullMonth[1] = 29;
}
// 计算月份
const yearDiff = endYear - startYear;
const monthDiff = endMonth - startMonth - 1;
let result = 0;
// 同年的情况下
if (yearDiff === 0) {
// 同月的情况下
if (monthDiff === -1) {
result = (endDay - startDay + 1) / startFullMonth[startMonth];
}
// 不同月情况下
if (monthDiff > -1) {
// 开始日是否小于结束日
if (startDay <= endDay) {
result =
monthDiff +
(startFullMonth[startMonth] - startDay + 1) / startFullMonth[startMonth] +
endDay / endFullMonth[endMonth];
} else {
result =
monthDiff +
(startFullMonth[startMonth] - startDay + 1) / startFullMonth[startMonth] +
endDay / endFullMonth[endMonth];
}
}
}
// 不同年的情况下
if (yearDiff > 0) {
result =
yearDiff * 12 +
monthDiff +
(startFullMonth[startMonth] - startDay + 1) / startFullMonth[startMonth] +
endDay / endFullMonth[endMonth];
}
return result.toString().substring(0,4);
}
web 端预览效果