代码之家  ›  专栏  ›  技术社区  ›  joe

计算两个日期之间的差值

  •  5
  • joe  · 技术社区  · 15 年前

    我试过这样做

    <script type="text/javascript">
         var date2=02/09/2009;
         var date1=03/12/2009;
         var diff = date1.getDate()-date2.getDate();
         alert (diff);
    
    </script>
    

    但它不起作用,这是原因吗 getDate 将只适用于 Date ?

    如何找出这两个日期之间的差异?我是否无法使用此函数,因为我正在salesforce CRM apex页面中添加javascript?

    <script type="text/javascript">
         var date2= new Date ("02/09/2009");
         var date1= new Date ("04/09/2009");
         var diff = date1.getDate()-date2.getDate();
         alert (diff);
    
    </script>
    

    编辑2:它不工作太。。。

    <script type="text/javascript">
         var date2= "02/09/2009";
         var date1= "04/09/2009";
         var diff2 =    new Date(Date.parse("03/12/2009")-
                            Date.parse("02/09/2009")).toLocaleDateString();
    

    //var new_date=新日期(1970年1月1日); //var diff3=diff2.getDate(); 警报(diff2);

    </script>
    
    10 回复  |  直到 15 年前
        1
  •  17
  •   Robert L    15 年前
    
    <script language="JavaScript">
    <!--
    function dstrToUTC(ds) {
     var dsarr = ds.split("/");
     var mm = parseInt(dsarr[0],10);
     var dd = parseInt(dsarr[1],10);
     var yy = parseInt(dsarr[2],10);
     return Date.UTC(yy,mm-1,dd,0,0,0);
    }
    
    function datediff(ds1,ds2) {
     var d1 = dstrToUTC(ds1);
     var d2 = dstrToUTC(ds2);
     var oneday = 86400000;
     return (d2-d1) / oneday;
    }
    
    // test cases are below
    
    var a; var b;
    
    a = "01/09/1999";
    b = "01/10/1999";
    document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>");
    
    a = "01/12/1999";
    b = "01/19/1999";
    document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>");
    
    a = "01/19/1999";
    b = "01/12/1999";
    document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>");
    
    a = "01/03/1999";
    b = "01/13/1999";
    document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>");
    
    a = "04/30/1999";
    b = "05/01/1999";
    document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>");
    
    a = "05/30/1999";
    b = "06/01/1999";
    document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>");
    
    a = "02/28/1999";
    b = "03/01/1999";
    document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>");
    
    a = "02/28/2000";
    b = "03/01/2000";
    document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>");
    
    a = "01/01/1999";
    b = "12/31/1999";
    document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>");
    
    a = "01/01/2000";
    b = "12/31/2000";
    document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>");
    
    a = "12/15/1999";
    b = "01/15/2001";
    document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>");
    
    // -->
    </script>
    
        2
  •  4
  •   RameshVel    15 年前

    date2=02/09/2009不被视为日期。它是这样工作的。首先,它划分为02/09,返回0.22222,然后除以2009(0.22222/2009)。最后您得到了一个结果date2=0.00011063510314695。与计算date1的结果的方式相同。

    使用new Date()或Date.parse(“02/09/2009”)

    编辑:

       new Date(Date.parse("03/12/2009")-Date.parse("02/09/2009")).toLocaleDateString() Or
       new Date(date1- date2).toLocaleDateString()
    

    那不管用吗。。??

    编辑:

    也许这行得通。。你能试试这个吗。。

     Date.parse("03/12/2009")-Date.parse("02/09/2009") / (24*60*60*1000) 
    

    它会在31天内返回

    这似乎对我有用。。但在我的时区,2009年12月3日是2009年第3个月第11天

        3
  •  2
  •   SilentGhost    15 年前

    getDate Date 对象正如任何文档明确指出的那样,它返回的日期范围为0到31。如果不是同一个月,尝试从另一个中减去一个是没有意义的。

        4
  •  1
  •   bogdanbrudiu    15 年前
    diff.setTime(Math.abs(date1.getTime() - date2.getTime()));
    
    timediff = diff.getTime();
    
    weeks = Math.floor(timediff / (1000 * 60 * 60 * 24 * 7));
    timediff -= weeks * (1000 * 60 * 60 * 24 * 7);
    
    days = Math.floor(timediff / (1000 * 60 * 60 * 24)); 
    timediff -= days * (1000 * 60 * 60 * 24);
    
    hours = Math.floor(timediff / (1000 * 60 * 60)); 
    timediff -= hours * (1000 * 60 * 60);
    
    mins = Math.floor(timediff / (1000 * 60)); 
    timediff -= mins * (1000 * 60);
    
    secs = Math.floor(timediff / 1000); 
    timediff -= secs * 1000;
    
    alert(weeks + " weeks, " + days + " days, " + hours + " hours, " + mins + " minutes, and " + secs + " seconds");
    
        5
  •  1
  •   Khodor    15 年前

        6
  •  1
  •   Residuum    15 年前
    1. getDate()返回日期 一个月,在你的情况下:9和12。
    2. 您应该通过以下方式明确定义日期对象。月份是以0为基础的,因此0=一月,1=二月。。。

    3. 这些是数字,不是字符串。如果要使用字符串作为日期,则需要完全相同的格式,没有任何内容是可选的:

      var newDate=新日期(“月日,年时:分:秒”); var date2=新日期(“2009年2月9日00:00:00”);

    <script type="text/javascript">
        function daysFromString(dateString)
        {
            // split strings at / and return array
            var splittedString = dateString.split("/");
            // make a new date. Caveat: Months are 0-based in JS
            var newDate = new Date(parseInt(splittedString[2], 10), parseInt(splittedString[0], 10)-1, parseInt(splittedString[1], 10));
            // returns days since jan 1 1970
            return Math.round(newDate.getTime() / (24*3600*1000));
        }
    
        var dateString2 = "02/09/2009";
        var dateString1= "03/12/2009";
        var dateDays1 = daysFromString(dateString1);
        var dateDays2 = daysFromString(dateString2);
        var diff = dateDays1 - dateDays2;
        alert (diff);
    </script>
    
        7
  •  0
  •   dmateev    15 年前

    Here 解释了如何在javascript中查找两个日期之间的差异

        8
  •  0
  •   Pier Luigi    15 年前

    你必须使用 日期 对象,像这样

    var d = new Date(2009,9,19); //19th october, months are 0-based
    var d2 = new Date(2009,10,12);
    var diff = (d2 - d)/60000;  //diff in minutes
    alert(diff / 24);   //difference in hours
    
        9
  •  0
  •   Elias Zamaria    15 年前

    var diff2 =    Date.parse("03/12/2009") - Date.parse("02/09/2009");
    

    它将以毫秒为单位显示日期之间的差异。将这个数字除以86400000,差额将以天为单位。

        10
  •  -1
  •   rahul    15 年前
    <script type="text/javascript">
    function GetD()
    {
        var date1 = new Date ( 2009 , 09 , 02 );
        var date2 = new Date ( 2009 , 12 , 03 );        
    
        var diff = days_between (date1,date2);
        alert ( diff );
    }
    function days_between(date1, date2) {
    
        // The number of milliseconds in one day
        var ONE_DAY = 1000 * 60 * 60 * 24;
    
        // Convert both dates to milliseconds
        var date1_ms = date1.getTime();
        var date2_ms = date2.getTime();
    
        // Calculate the difference in milliseconds
        var difference_ms = Math.abs(date1_ms - date2_ms);
    
        // Convert back to days and return
    
        return Math.round(difference_ms/ONE_DAY);
    }
    </script>