写了一个求时间差的Javascript函数,可是老是出错(与SQLServer中的datediff相比,有偏差)
Date.prototype.diff=function(part,redate){
var enddate,msspan,diff;
var re=new RegExp(/^(\d{4})-(0?[1-9]|1[0-2])-(0?[1-9]|[1-2]\d|3[0-1])( (0?\d|1\d|2[0-3]):(0?\d|[1-5]\d):(0?\d|[1-5]\d)([.](\d{1,3}))?)?$/);
var reprefix0=new RegExp(/^0(\d)/);
if(re.test(redate))
{
re.exec(redate);
var yyyy=RegExp.$1;
var mm=RegExp.$2;
var dd=RegExp.$3;
var hh=RegExp.$5;
var mi=RegExp.$6;
var ss=RegExp.$7;
var ms=RegExp.$9;
var yyyy=parseInt(yyyy);
var mm=parseInt(delPrefixZero(mm))-1;
dd=parseInt(delPrefixZero(dd));
hh=parseInt(delPrefixZero(hh));
mi=parseInt(delPrefixZero(mi));
ss=parseInt(delPrefixZero(ss));
ms=parseInt(delPrefixZero(ms));
enddate=new Date(yyyy,mm,dd,hh,mi,ss);
}
else
{
try
{
   enddate=new Date(Date.parse(redate));
}
  catch(e)
{
alert(e);
return;
}
}
if(enddate=="Invalid Date"){
alert("非法日期!");
return;
}else{
msspan=enddate.getTime()-this.getTime();
switch(part){
case "ss":
diff=msspan/1000;
break;
case "mi":
diff=msspan/1000/60;
break;
case "hh":
diff=msspan/1000/60/60;
break;
case "dd":
diff=msspan/1000/60/60/24;
break;
case "wk":
diff=msspan/1000/60/60/24/7;
break;
case "mm":
diff=(enddate.getFullYear()-this.getFullYear())*12+enddate.getMonth()-this.getMonth();
break;
case "qq":
diff=((enddate.getFullYear()-this.getFullYear())*12+enddate.getMonth()-this.getMonth())/3;
break;
case "yy":
diff=enddate.getFullYear()-this.getFullYear();
break;
default:
diff=msspan;
}
diff=parseInt(diff);
return diff;
}
function delPrefixZero(str)
{
var re=new RegExp(/^0*/);
str=str.replace(re,"");
if(str=="")str="0";
return str;
}
}现在的问题是,在SqlServer中,datediff(mi,'2009-10-10 09:21:59','2009-10-10 09:22:00')得到的相差分数为1分钟,实际上差的是1秒钟,用js得到的则为0分钟,该如何校正呢?

解决方案 »

  1.   

    (date1-date2)/1000/60/60/24类似这样也可以,但是现在关键是与SQLServer中的计算有偏差,不知道该如何校正
      

  2.   

    datediff(ss,'2009-10-10 09:21:59','2009-10-10 09:22:00')
      

  3.   

    var begin = new Date('2009/9/9');
    var end = new Date('2009/9/11');
    alert((end-begin)/1000+"秒");
      

  4.   

    大概明白LZ想要啥了.
    你想要那样的话就不要直接
            diff=parseInt(diff);
            return diff;
    先Math.ceil(diff)一下.
      

  5.   


    var def = Date.parse(date1) - Date.parse(date2);
    alert("时间间隔为 " + def + "毫秒");-----------------------------------------------------------
    www.bleehome.cn
      

  6.   


    这种方法在diff为负值时会出错,总是已经解决了,谢谢各位