js 判断两个时间相差多少月_js如何计算两个日期的月份差?

展开全部

如何通过JS计算两636f707962616964757a686964616f31333332613137个日期相差天数(月份同理):var s1 = "2007-01-01".replace(/-/g, "/");

var s2 = "2007-12-31".replace(/-/g, "/");

d1 = new Date(s1);

d2 = new Date(s2);

var time= d2.getTime() - d1.getTime();

var days = parseInt(time / (1000 * 60 * 60 * 24));

alert("相差天数: " + days); JS计算两个时间之间的月份差: //本代码经过我自己的测试没问题

//注意 d_start、和d_end是Date对象

//d_start可以这样创建:Date d_start = new Date(2010,03,31);

//d_end可以这样创建:Date d_start = new Date(2010,04,1);

//startTmp、endTmp是数组对象 解决日期是XXXX年XX月31日是所遇见的问题(如2010-03-31被java script看成//是2010-04-01,我发现xxxx-xx-31在java script中它的毫秒值和它的下一个月的第一天一样)

//那么对应的startTmp的值为[2010,3,31],endTmp[2010,4,1]

//

注意后面有个简单的方法,并且我解释了上面的问题出现的原因

//

function diffDay(d_start, d_end, startTmp, endTmp){

var confict_day = 0;

var y_startIsLeap = false;

var y_start = d_start.getYear();

var y_end = d_end.getYear();

var m_start = startTmp[1];

var m_end = endTmp[1];

//judge whether year is run year eg 2000

if(isLeapYear(y_start)){

y_startIsLeap = true;

}

//judge whether same year

if(y_start!=y_end){

confict_day ++;

}else{

if(m_start==m_end){

confict_day ++;

}

if(m_start==1&&m_end==2){

if(y_startIsLeap){

confict_day+=3;

}else{

confict_day+=4;

}

}

if(m_start==2&&m_end==3){

if(y_startIsLeap){//start is leap year

confict_day --;

}else{

confict_day -=2;

}

}

if(is31DayMonth(m_start)&&is30DayMonth(m_end)){

confict_day =2;

}

}

var tmp = (d_end.getTime()-d_start.getTime())/24/60/60/1000;

tmp +=confict_day;

return tmp;

}

function isLeapYear(year){

var flag = false;

year+=1900;

if((year%400==0)||(year%4==0&&year%100!=0)){

flag = true;

}

return flag;

}

function is30DayMonth(month){

var tmp = [4,6,9,11];

month = month-0;

var flag = false;

for(var i=0; i

if(month==tmp[i]){

flag = true;

break;

}

}

return flag;

}

function is31DayMonth(month){

var tmp = [1,3,5,7,8,10,12];

var flag = false;

month = month-0;

for(var i=0; i

if(month==tmp[i]){

flag = true;

break;

}

}

return flag;

}

function isFebMonth(month){

month = month-0;

var flag = false;

if(month==2){

flag = true;

}

return flag;

}

function isLastDay(year, month, date){

var flag = false;

if(date==30&&is30DayMonth(month)){

flag = true;

}else if(date==31&&is31DayMonth(month)){

flag = true;

}else if(isFebMonth(month)){

if(isLeapYear(year)&&date==29){

flag = true;

}else if(!isLeapYear(year)&&date==28){

flag = true;

}

}

return flag;

}

javascript的API发现在js中月份的范围是0-11即从0开始(0表示一月份),所以也就会出现我前面说的2010-03-31被js看成是2010-04-01,其实是这么回事:2010-03-31在js中表示的时间是2010年4月31日而不是2010-3-31,我们知道4月份是没有31日的,所以js会默认地帮你向后移一天也即2010-4-1(注意这里表示的时间是2010年5月1日)

因此我们只要在原来的月份上减去一,然后通过getTime()获取毫秒数,并两者相减,再除以一天的毫秒数即得到所谓的相隔天数!!!

EG:

var start = $("#startDate").val();

var end = $("#endDate").val();

var reason =$("#reason").val();

var days = $("#leaveDays").val();

if(!start.match(new RegExp('^[0-9]+-[0-9]+-[0-9]+.*$'))){

alert("Please choosh the start date!");

return;

}

if(!end.match(new RegExp('^[0-9]+-[0-9]+-[0-9]+.*$'))){

alert("Please choosh the end date!");

return;

}

if(reason==''){

alert("Please input reason!");

return;

}

var startTmp = start.split("-");

var endTmp = end.split("-");

var dS = new Date(startTmp[0],startTmp[1]-1,startTmp[2]);//注意这里减除一

var dE = new Date(endTmp[0],endTmp[1]-1,endTmp[2]);//注意这里减除一

var nowDate = new Date();

var nowTmp = new Date(nowDate.getYear()+1900,nowDate.getMonth(),nowDate.getDate());

if((nowTmp-dS)>0){

alert("Start date can't early today!");

return;

}

var distance = (dE-dS)/86400000;

distance++;

这样就可以了,不用向上面的这么复杂

核心就在上面的时间月份是从1月开始的(与js默认的月份从0开始不一致!!!)

参考资料: http://www.qnr.cn/pc/erji/JAVA/jiqiao/200911/244838.html http://js.alixixi.com/a/20090228703.shtml http://blog.csdn.net/luoduyu/archive/2007/07/27/1711409.aspx

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值