getBDRate=(strDate-firstDay)/365 应为
getBDRate=Round((strDate-firstDay)/365,2)

解决方案 »

  1.   

    java里没有判断是否是合法日期和比较日期的函数。
    只能自己写一个了。我给你试试看,不过需要时间。
      

  2.   

    我写了一个,由于你要求把两个函数(getBDRate和isDate)分开,代码有一些重复。
    其中isDate考虑了日期分隔符的问题,getBDRate没有考虑,所以定义了一个全局变量保存分隔符
    <script>
    var sQuote = "/";
    function isDate(strDate, strQuote){
    /*参数有两个,第一个为表示日期的字符串,格式为年(分隔符)月(分隔符)日。
    第二个为年月日之间的分隔符。调用的时候第二个参数可以省略,如果省略则认
    为年月日之间用"/"分隔。*/
    if(arguments.length == 1){
    strQuote = "/";
    }else{
    sQuote = strQuote;
    }
    var arrDate = strDate.split(strQuote);
    arrDate[1] = arrDate[1] - 1;//js中月份是0-11
    strDate = arrDate.join("/");
    var objDate = new Date(strDate);
    if(isNaN(Date.parse(strDate))) return false;
    if(parseInt(arrDate[0]) != objDate.getFullYear() ||
       parseInt(arrDate[1]) != objDate.getMonth() ||
       parseInt(arrDate[2]) != objDate.getDate()
      ) return false;
    return true;
    }
    function getBDRate(strDate){
    var today = new Date();
    var objDate;
    var firstDay = new Date(today.getFullYear(), 1, 1);
    if(!isDate(strDate)){
    alert("请输入日期!");
    return NaN;
    }else{
    var arrDate = strDate.split(sQuote);
    arrDate[1] = arrDate[1] - 1;
    strDate = arrDate.join("/")
    objDate = new Date(strDate);
    }
    //js里两个Date对象是可以直接相减的,结果和调用valueOf是一样的,都返回两者
    //之间的毫秒数
    return Math.round((objDate.valueOf() - firstDay.valueOf())/(365 * 24 * 3600 * 1000)*100)/100;
    }var x = getBDRate("2002/1/30");
    if(!isNaN(x)) alert(x);
    </script>
      

  3.   

    多谢silentlamb(silent)了
    不过在我的机上调getBDRate("2002/1/30")时
    arrDate[0]=1
    arrDate[1]=29
    arrDate[2]=2002