我有一个js方法
function f1(date1,date2){}
date1和date2是两个字符型的变量,比如他们的值是'2010-01-01'和'2010-04-28'
现在我想这个js中算出这两个日期的差值,返回结果是两个日期差值的天数.怎么做?

解决方案 »

  1.   

    问题的关键在于如何将一个字符型的date1和date2转换成js中的Date对象
      

  2.   

    var data1="2010-01-01";
    var data2="2010-04-28"
    var a[3]=data1.split("-");
    var b[3]=data2.split("-");
    if(b[0]==a[0]){
           if(b[1]==a[1]){
                if(b[2]==a[2]){
                  alert(两个日期相同!);
              }
       }
    }
    else .....年乘以365*24*3600转换成秒,月和日也是类似
    然后减掉之后的差值再换算回来,最后得出结果!
      

  3.   


    这种把字符串拆开的做法肯定是能做,但是我认为不好.我想问的其实就是js中有没有办法直接将一个字符串型的变量直接转换成Date类型,如果可以的话直接.getTime然后一减就可以了.如果把字符串拆分的话肯定可以做到,就var d = new Date();然后d.setYear()....一点一点配就可以了.我想要的是不拆分字符串有没有方法?
      

  4.   

    var start = new Date(2010,1,1);
    var end = new Date(2010,4,28);
    alert(parseInt((end-start) / (1000 * 60 * 60 * 24)));
    如果是负值,表示end比start小
      

  5.   

    //格式化时间
    Date.prototype.format = function(format) //author: meizz
    {
    var o = {
    "M+" : this.getMonth()+1, //month
    "d+" : this.getDate(), //day
    "h+" : this.getHours(), //hour
    "m+" : this.getMinutes(), //minute
    "s+" : this.getSeconds(), //second
    "q+" : Math.floor((this.getMonth()+3)/3), //quarter
    "S" : this.getMilliseconds() //millisecond
    }
    if(/(y+)/.test(format)) format=format.replace(RegExp.$1,
    (this.getFullYear()+"").substr(4 - RegExp.$1.length));
    for(var k in o)if(new RegExp("("+ k +")").test(format))
    format = format.replace(RegExp.$1,
    RegExp.$1.length==1 ? o[k] :
    ("00"+ o[k]).substr((""+ o[k]).length));
    return format;
    }//判断发生时间要大于出生日期
    function checkHappentimeBigBir(name,obj)
    {
    var birth=document.getElementById("DCsrq").innerHTML;
    if(birth==""){
    return true;
    }
    ymd1=birth.split("-");
         month1=ymd1[1]-1;
               var Date1 = new Date(ymd1[0],month1,ymd1[2]); 
               if(obj.value=="")
               {
                return true;
               }
               ymd2=obj.value.split("-");
         month2=ymd2[1]-1;
               var Date2 = new Date(ymd2[0],month2,ymd2[2]);
              if(Date1.format('yyyy-MM-dd')>Date2.format('yyyy-MM-dd')){
             alert(name+"不能小于出生时间!");
             obj.value="";
             obj.focus();
             return false; 
             }
    }这是我用的一段代码,可以参考下
      

  6.   

    哈哈 简单 //调用该方法(主方法) 
    function dateDiff(date1, date2){ 
        var type1 = typeof date1, type2 = typeof date2; 
        if(type1 == 'string') 
        date1 = stringToTime(date1); 
        else if(date1.getTime) 
        date1 = date1.getTime(); 
        if(type2 == 'string') 
        date2 = stringToTime(date2); 
        else if(date2.getTime) 
        date2 = date2.getTime(); 
        return (date1 - date2) / 1000;//除1000是毫秒,不加是秒 
    }//字符串转成Time(dateDiff)所需方法 
    function stringToTime(string){ 
        var f = string.split(' ', 2); 
        var d = (f[0] ? f[0] : '').split('-', 3); 
        var t = (f[1] ? f[1] : '').split(':', 3); 
        return (new Date( 
        parseInt(d[0], 10) || null, 
        (parseInt(d[1], 10) || 1)-1, 
        parseInt(d[2], 10) || null, 
        parseInt(t[0], 10) || null, 
        parseInt(t[1], 10) || null, 
        parseInt(t[2], 10) || null 
        )).getTime(); } //调用 dateDiff("2009-10-10 19:00:00","2009-10-10 18:00:00")相减得到秒 然后再 转换成天 就可以啦!
      

  7.   


    楼上不说了么可以 new Date(y,m,d)
      

  8.   

    var startDate=document.getElementById('startDate').value;
    var endDate=document.getElementById('endDate').value; if(new Date(startDate.replace(/-/g,"\/")) >= 
        new Date(endDate.replace(/-/g,"\/"))){//验证大小
          alert("开始时间要小于结束时间");
         return false;
    }
      

  9.   

    晕 LZ说的是构造日期的时候吗?不用拆,但你'2010-04-28'这样的格式不行,要"月-日-年"的格式才行,
    var endDate = Date.parse("4-28-2010");
    如果在构造日期之前转换不用我说了吧!
      

  10.   

    var a = new Date();
    a = a.valueOf();
    a = a + dadd * 24 * 60 * 60 * 1000;
    a = new Date(a);dadd 是增减量
      

  11.   

    Date#getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
      

  12.   

    js中gettime可以将时间化为毫秒,再进行做差计算即可。
      

  13.   


    感谢ltandfyy,简单实用才是硬道理