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;
}

}
}

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25261409/viewspace-1058704/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25261409/viewspace-1058704/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值