function calculateDates (startime,endtime) {
startime = startime.replace(new RegExp("-","gm"),"/");//转换-变为/
endtime = endtime.replace(new RegExp("-","gm"),"/");
var minTime = new Date(startime).getTime()>new Date(endtime).getTime()?endtime:startime
var maxTime = new Date(startime).getTime()>new Date(endtime).getTime()?startime:endtime
var start = new Date(minTime);
var startYear = start.getFullYear(); //开始年份
var startMonth = start.getMonth() + 1;//开始月份
var end = new Date(maxTime);
var endYear = end.getFullYear(); //结束年份
var endMonth = end.getMonth() + 1;//结束月份
// 年
var mideleYear=new Date(minTime)
mideleYear.setFullYear(endYear)
var years = Math.abs(mideleYear.getFullYear() - start.getFullYear());
if(mideleYear.getTime()>end.getTime()){
years--
}
// 月
var mideleMonthDay = new Date(minTime)
mideleMonthDay.setFullYear(endYear)
mideleMonthDay.setMonth(endMonth-1)
console.log(mideleMonthDay.toLocaleDateString())
var months = (endYear*12+endMonth) - (startYear*12+startMonth) - years*12
if(mideleMonthDay.getTime()>end.getTime()){
months--
}
// 日
var day = (Math.floor((end.getTime() - start.getTime()) / 24 / 60/ 60 / 1000))
if(end.getTime()> mideleMonthDay.getTime()){
day = (Math.floor( (end.getTime() - mideleMonthDay.getTime()) / 24 / 60/ 60 / 1000)) - day
}else{
let prevMonthDay = new Date(mideleMonthDay)
prevMonthDay.setMonth(endMonth-2)
day = (Math.floor((end.getTime() - prevMonthDay.getTime()) / 24 / 60/ 60 / 1000))
}
var chaTime = end.getTime() - start.getTime()
var chaDay = Math.floor(chaTime / 24 / 60/ 60 / 1000)
var hour = Math.floor(chaTime / 60/ 60 / 1000) - chaDay*24
var min = Math.floor(chaTime / 60 / 1000) - chaDay*24*60 - hour*60
var sec = Math.floor(chaTime / 1000) - chaDay*24*60*60 - hour*60*60 - min*60
var chastr = years+'年'+months+'月'+day+'日'+hour+'时'+min+'分'+sec+'秒';
console.log('相差时间:'+chastr);
}
不喜欢返回负数可转换,如:
var n = -30;
n = Math.abs(n);
console.log(n); // 30