js計算兩個日期相差的正月數

livedba發表於2012-07-03
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;
}

}
}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25261409/viewspace-1058704/,如需轉載,請註明出處,否則將追究法律責任。

相關文章