Bootstrap

两个日期相差的年数java_js计算两个日期相差的正月数

js计算两个日期相差的正月数[@more@]

/**

**判断是否为当年当月的最后一天

*/

function isLastDay(yearV,monthV,dayV){

var new_year = yearV; //取当前的年份

var new_month = monthV+1;//取下一个月的第一天,方便计算(最后一天不固定)

if(new_month>12) //如果当前大于12月,则年份转到下一年

{

new_month -=12; //月份减

new_year++; //年份增

}

var new_date = new Date(new_year,new_month,1); //取当年当月中的第一天

var lastDay = (new Date(new_date.getTime()-1000*60*60*24)).getDate();//获取当月最后一天日期

if(lastDay==dayV){

return true;

}else{

return false;

}

}

/**

**计算距离月底还有几天

*/

function getLastDayAway(yearV,monthV,dayV){

var new_year = yearV; //取当前的年份

var new_month = monthV+1;//取下一个月的第一天,方便计算(最后一天不固定)

if(new_month>12) //如果当前大于12月,则年份转到下一年

{

new_month -=12; //月份减

new_year++; //年份增

}

var new_date = new Date(new_year,new_month,1); //取当年当月中的第一天

var lastDay = (new Date(new_date.getTime()-1000*60*60*24)).getDate();//获取当月最后一天日期

var away_day = lastDay-dayV;

return away_day;

}

/**

* @param startDate

* 开始日期

* @param endDate

* 结束日期

* @return 计算相差月份,必须满足正好一个月才进一

*/

function getDateMonthSub(startDate, endDate) {

if (startDate == null || startDate == undefined || startDate == ""

|| endDate == null || endDate == undefined || endDate == "")

return 0;

var endDate = new Date(endDate);

var startDate = new Date(startDate);

var renNumber = 0;

var yearToMonth = (endDate.getFullYear() - startDate.getFullYear()) * 12;

// 计算年份相差月份

renNumber += yearToMonth;

var startYear = startDate.getFullYear();// 开始日期-年份

var endYear = endDate.getFullYear();// 结束日期-年份

var startMon = startDate.getMonth();// 开始日期-月份

var endMon = endDate.getMonth();// 结束日期-月份

var startDay = startDate.getDate();// 开始日期-日

var endDay = endDate.getDate();// 开始日期-日

var monthToMonth = endDate.getMonth() - startDate.getMonth();

// 计算月份相差

renNumber += monthToMonth;

// 如果开始日期是最后一天并且结束日期不是最后一天,那么返回值-1

if (isLastDay(startYear, startMon, startDay)

&& !isLastDay(endYear, endMon, endDay)) {

renNumber -= 1;

return renNumber;

} else {

// 如果开始日期和结束日期都不是最后一天

if (!isLastDay(startYear, startMon, startDay)

&& !isLastDay(endYear, endMon, endDay)) {

// 如果都不是最后一天,就需要计算开始日期和结束日期的天数距离结束还有几天,分别为start_last,end_last

var start_last = getLastDayAway(startYear, startMon, startDay);

var end_last = getLastDayAway(endYear, endMon, endDay);

alert(end_last)

// 如果结束日期距离月底的天数比开始日期距离月底的天数大,则返回值-1

if (end_last > start_last) {

renNumber -= 1;

return renNumber;

} else {

return renNumber;

}

} else {

// 如果开始日期和结束日期的天都是当月的最后一天,那么相差月份就是实际月份相减的值

// 其他情况都直接返回renNumber

return renNumber;

}

}

}

;