当前系统时间格式是:2010年9月16日 14:38:20
另一时间格式是:2010/9/10 18:25:18
怎样用jquery计算两者的时间差,单位是 天
各位大侠拜托了,小妹在这跪谢了!!

解决方案 »

  1.   

    var   date1 = "2010年9月16日 14:38:20";
    var   date2 = "2010/9/10 18:25:18";

    date1 = date1.replace("年","/").replace("月","/").replace("日","");
    var days = new Date(date1).getDate()-new Date(date2).getDate();
    alert(days);//6
      

  2.   

    1L没有考虑不用年月的日数差距以下两种, 大体相仿<html>
    <head>
    <script language="javascript">
    var str1 = '2010年9月16日 14:38:20';
    var str2 = '2010/9/10 18:25:18';

    //用字符串分割, 精确到日
    function Days(day1, day2){
    var y1, y2, m1, m2, d1, d2;//year, month, day;
    y1 = parseInt(day1);
    y2 = parseInt(day2.split('/')[0]); m1 = parseInt(day1.split('年')[1].split('月')[0]);
    m2 = parseInt(day2.split('/')[1]); d1 = parseInt(day1.split('年')[1].split('月')[1].split('日')[0]);
    d2 = parseInt(day2.split('/')[2]); var date1 = new Date(y1, m1, d1);
    var date2 = new Date(y2, m2, d2);

    //用距标准时间差来获取相距时间
    var minsec = Date.parse(date1) - Date.parse(date2);
    var days = minsec / 1000 / 60 / 60 / 24; //factor: second / minute / hour / day return days;
    } alert(Days(str1, str2)); //用正则, 且精确到秒
    function Days1(day1, day2){
    var y1, y2, y3, m1, m2, m3, d1, d2, d3, h1, h2, h3, _m1, _m2, _m3, s1, s2, s3;
    var reg = /年|月|日 |\/|:| /;
    //dayinfo -  用正则分割
    var DI1 = day1.split(reg);
    var DI2 = day2.split(reg); var date1 = new Date(DI1[0], DI1[1], DI1[2], DI1[3], DI1[4], DI1[5]);
    var date2 = new Date(DI2[0], DI2[1], DI2[2], DI2[3], DI2[4], DI2[5]); //用距标准时间差来获取相距时间
    var minsec = Date.parse(date1) - Date.parse(date2);
    var days = minsec / 1000 / 60 / 60 / 24; //factor: second / minute / hour / day

    return days;
    } alert(Days1(str1, str2));
    </script>
    </head>
      <body>

      </body>
    </html>
      

  3.   

    大哥,你考虑每月有多少天吗?你这个是按每月30天吧,你把str2的值改成2010/8/30试试,输出的应该是17天吧,你这输出的是16天,8月份有31天的。
      

  4.   

    大哥,你考虑月份了吗?如果date2是2010/8/30 18:25:18会是怎样?
      

  5.   


    当然考虑了 这是根据标准时间相减的出来的毫秒值. 
    不过lz说的问题我查了一下, 以前还真没注意
    http://www.soidc.net/discuss/12/060803/21/62525_1.html
    这是JS的bug, 8月31日会自动等于9月1日. 囧, 真不知道还有这种事, 你换做别的日期来时应该都是对的吧. 解决办法, 如果判断出来某一天是8月31日, 就相应+1或-1。 
    另请仔细看代码, 我的思路没错
      

  6.   

    考虑月份的话,2L的稍改下就可以了
    var date1 = "2010年9月16日 14:38:20";
    var date2 = "2010/8/30 18:25:18";
    date1 = date1.replace("年","/").replace("月","/").replace("日","");
    var d1 = parseInt(new Date(date1).getTime()/1000/60/60/24);
    var d2 = parseInt(new Date(date2).getTime()/1000/60/60/24);
    var days = d1 - d2;
    alert(days);==========================
    to #5楼:
    var date1 = new Date(DI1[0], DI1[1], DI1[2], DI1[3], DI1[4], DI1[5]);
    用这种方法定义日期,月份一定要-1(月份范围0-11)
      

  7.   

    月份不用-1, 你定义后alert(getMonth())就知道了. 只不过在通过12定义的时候, 返回的是0. js的Date()问题很多啊. 不过因为两个都是根据标准时间计算的, 所以两边同时+1/-1  +n/-n都无所谓了
    6L的时间获取也是对的. 只不过一个是用date.getTime()一个是用Date.parse(date)结果是一样的. 遇到8月31还是出问题. 我仔细查了一下, js里认为8月只有30天, lz遇到8月就稍加修改
      

  8.   

    LS试过其他月份吗?以下是从JS参考手册中摘取的一部分:dateObj = new Date()
    dateObj = new Date(dateVal)
    dateObj = new Date(year, month, date[, hours[, minutes[, seconds[,ms]]]]) 参数
    dateObj必选项。要赋值为 Date 对象的变量名。dateVal必选项。如果是数字值,dateVal 表示指定日期与 1970 年 1 月 1 日午夜间全球标准时间 的毫秒数。如果是字符串,则 dateVal 按照 parse 方法中的规则进行解析。dateVal 参数也可以是从某些 ActiveX(R) 对象返回的 VT_DATE 值。year必选项。完整的年份,比如,1976(而不是 76)。month必选项。表示的月份,是从 0 到 11 之间的整数( 1 月至 12 月)。date必选项。表示日期,是从 1 到 31 之间的整数。hours可选项。 如果提供了 minutes 则必须给出。表示小时,是从 0 到 23 的整数(午夜到 11pm)。minutes可选项。 如果提供了 seconds 则必须给出。表示分钟,是从 0 到 59 的整数。seconds可选项。 如果提供了 milliseconds 则必须给出。表示秒钟,是从 0 到 59 的整数。ms可选项。 表示毫秒,是从 0 到 999 的整数。============================================
    月份和日期的双重标准让人很不爽~
      

  9.   

    当然试过了1月-11月均是相应的数字12是0. 你可以试一下啊var date = new Date(2010,1,20);
    alert(date.getMonth())
      

  10.   


    那么有没有试一下输出new Date(2010,1,1)和new Date(2010,2,1)之间的天数差?
      

  11.   

    知错能改. 我原先错了.那么一切都可以解释了. 也非8月31日的bug, 我马上把代码贴出来lz.<html>
    <head>
    <script type="text/javascript" src="jquery/jquery.js"></script>
    <script language="javascript">
    //var date = new Date(2010,1,20);
    //alert(date.getMonth())
    var str1 = '2010年9月16日 14:38:20';
    var str2 = '2010/8/30 18:25:18';

    //用字符串分割, 精确到日
    function Days(day1, day2){
    var y1, y2, m1, m2, d1, d2;//year, month, day;
    y1 = parseInt(day1);
    y2 = parseInt(day2.split('/')[0]); m1 = parseInt(day1.split('年')[1].split('月')[0]);
    m2 = parseInt(day2.split('/')[1]); d1 = parseInt(day1.split('年')[1].split('月')[1].split('日')[0]);
    d2 = parseInt(day2.split('/')[2]); var date1 = new Date(y1, m1-1, d1);
    var date2 = new Date(y2, m2-1, d2); //用距标准时间差来获取相距时间
    var minsec = date1.getTime() - date2.getTime();
    var days = minsec / 1000 / 60 / 60 / 24; //factor: second / minute / hour / day return days;
    } alert(Days(str1, str2)); //用正则, 且精确到秒
    function Days1(day1, day2){
    var y1, y2, y3, m1, m2, m3, d1, d2, d3, h1, h2, h3, _m1, _m2, _m3, s1, s2, s3;
    var reg = /年|月|日 |\/|:| /;
    //dayinfo -  用正则分割
    var DI1 = day1.split(reg);
    var DI2 = day2.split(reg); var date1 = new Date(DI1[0], parseInt(DI1[1])-1, DI1[2], DI1[3], DI1[4], DI1[5]);
    var date2 = new Date(DI2[0], parseInt(DI2[1])-1, DI2[2], DI2[3], DI2[4], DI2[5]); //用距标准时间差来获取相距时间
    var minsec = Date.parse(date1) - Date.parse(date2);
    var days = minsec / 1000 / 60 / 60 / 24; //factor: second / minute / hour / day

    return days;
    } alert(Days1(str1, str2));
    </script>
    </head>
      <body>

      </body>
    </html>
      

  12.   

    wz_307你怎么这么说话,我分本来是给你的,是我看错了,能不能重给啊?你和slowhand分析得对,1楼的我一开始就否定了,我没注意分给了他,很抱歉啊!我是第一次在这发帖,实在抱歉。