JS计算两个日期之间相隔天数

Javascript 1617 0 2013-10-29

JS计算两个日期之间相隔天数
天数差:
//日期获取天数,时间差
function getDays(strDateStart,strDateEnd){
   var strSeparator = "-"; //日期分隔符
   var oDate1;
   var oDate2;
   var iDays;
   oDate1= strDateStart.split(strSeparator);
   oDate2= strDateEnd.split(strSeparator);
   var strDateS = new Date(oDate1[0], oDate1[1]-1, oDate1[2]);
   var strDateE = new Date(oDate2[0], oDate2[1]-1, oDate2[2]);
   iDays = parseInt(Math.abs(strDateS - strDateE ) / 1000 / 60 / 60 /24) //把相差的毫秒数转换为天数 
   return iDays;
}

以下为分析得到上面的结果:
==========================
做项目的时候碰到一个问题,就是要计算2个日期之间的天数之差,于是上网搜索了一下,找到了解决方案,代码如下:

//计算日期之差
function getDays(strDateStart,strDateEnd){
   var strSeparator = "-"; //日期分隔符
   var oDate1;
   var oDate2;
   var iDays;
   oDate1= strDateStart.split(strSeparator);
   oDate2= strDateEnd.split(strSeparator);
   var strDateS = new Date(oDate1[0] + "-" + oDate1[1] + "-" + oDate1[2]);
   var strDateE = new Date(oDate2[0] + "-" + oDate2[1] + "-" + oDate2[2]);
   iDays = parseInt(Math.abs(strDateS - strDateE ) / 1000 / 60 / 60 /24)//把相差的毫秒数转换为天数 

   return iDays ;
}

 

注意标红的两句话,也有写作为:
  var strDateS = new Date(oDate1[0] + "/" + oDate1[1] + "/" + oDate1[2]);
  var strDateE = new Date(oDate2[0] + "/" + oDate2[1] + "/" + oDate2[2]);

    因为平时调试页面时都是用的Firefox浏览器,写完上面代码一运行,ok,没有问题,能够正确计算,于是心中窃喜,又一次迅速的解决了一个问题;但是鉴于平时被浏览器兼容性骚扰的死去活来,本人重新将本段js放到IE下运行,没想到悲剧的事情还是发生了,IE浏览器竟然无法正确获取

  var strDateS = new Date(oDate1[0] + "-" + oDate1[1] + "-" + oDate1[2]);

    调试alert(strDateS )出来的竟然是NaN,对象有误,心情一下失落起来,浏览器你就不能让我省点心吗?,无奈,只能翻出JS参考手册,查找Date()对象,查出如下:

  dateObj = new Date();
  dateObj = new Date(dateVal);
  dateObj = new Date(year, month, date[, hours[, minutes[, seconds[,ms]]]]) ;

    大家有没有发现跟我上面所写代码不一样的地方?对,竟然没有dateObj = new Date(year+"-"+ month+"-"+ date) ;这种创建方式,那火狐是如何执行成功的?瞬间我就对火狐的强大感到“震精”!于是,将代码改为如下:

  var strDateS = new Date(oDate1[0], oDate1[1], oDate1[2]);

  var strDateE = new Date(oDate2[0], oDate2[1] , oDate2[2]);

    Ok,IE和火狐都运行正常!可正当我以为再也没有问题的时候,更大的悲剧悄然而至,当我输入两个2012-02-29和2012-03-01日期时,算出的结果竟然是0天,经过测试,发现只要是跨月的计算,结果总会出错,同月的不会,无奈,再次翻阅JS参考手册,发现JS对month参数的定义如下:

 month
 必选项。表示的月份,是从 0 到 11 之间的整数( 1 月至 12 月)。

  原因终于找到,原来月份是从0开始算的,又犯了一个低级错误,于是修改JS代码如下:

  var strDateS = new Date(oDate1[0], oDate1[1]-1, oDate1[2]);

  var strDateE = new Date(oDate2[0], oDate2[1]-1, oDate2[2]);

 这下完美解决!

上一篇:jquery on()方法绑定多个选择器,多个事件

下一篇:IE与Firefox下javascript getyear年份的兼容性写法

讨论数量:0

请先登录再发表讨论。 2024-04-19

天涯网魂
3 杠 5 星
TA 的文章
TA 的随言
TA 的资源链