Javascript 计算两个日期之间的差值

Javascript 计算两个日期之间的差值,javascript,date,Javascript,Date,我试过这样做 <script type="text/javascript"> var date2=02/09/2009; var date1=03/12/2009; var diff = date1.getDate()-date2.getDate(); alert (diff); </script> 编辑2:它也不起作用… <script type="text/javascript"> var date2=

我试过这样做

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

</script>
编辑2:它也不起作用…

<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>
<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 date2=“2009年9月2日”;
var date1=“04/09/2009”;
var diff2=新日期(日期解析(“03/12/2009”)-
Date.parse(“2009年9月2日”).toLocaleDateString();
//var new_date=新日期(1970年1月1日); //var diff3=diff2.getDate(); 警报(diff2)


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

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");
  • getDate()返回日期 一个月,在你的情况下:9和12
  • 您应该通过以下方式明确定义日期对象。月份是以0为基础的,因此0=一月,1=二月

    var date2=新日期(2009年1月9日)

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

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

  • [编辑] 完整解决方案,如果日期格式为mm/dd/yyyy,且差值应以天为单位:

    <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>
    
    
    函数daysFromString(日期字符串)
    {
    //在/和返回数组处拆分字符串
    var splittedString=dateString.split(“/”);
    //创建一个新日期。注意:在JS中,月份是以0为基础的
    var newDate=新日期(parseInt(splittedString[2],10),parseInt(splittedString[0],10)-1,parseInt(splittedString[1],10));
    //返回自1970年1月1日起的天数
    返回Math.round(newDate.getTime()/(24*3600*1000));
    }
    var dateString2=“2009年9月2日”;
    var dateString1=“03/12/2009”;
    var dateDays1=daysFromString(dateString1);
    var dateDays2=daysFromString(dateString2);
    var diff=dateDays1-dateDays2;
    警报(差异);
    
    getDate
    Date
    对象的一种方法。正如任何文档明确指出的那样,它返回的日期范围为0到31。如果不是同一个月,尝试从另一个中减去一个是没有意义的。

    使用Date.parse(date1)-Date.parse(date2)

    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()
    
    那不管用吗

    编辑:

    <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>
    
    <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();
    
    也许这行得通。。你能试试这个吗

     Date.parse("03/12/2009")-Date.parse("02/09/2009") / (24*60*60*1000) 
    
    它会在31天内返回

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

    (24*60*60*1000)=每天的毫秒数
    <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>
    
    函数GetD() { var date1=新日期(2009年9月2日); var date2=新日期(2009年12月3日); var diff=日期1和日期2之间的天数; 警报(差异); } 功能日之间(日期1、日期2){ //一天中的毫秒数 var一天=1000*60*60*24; //将两个日期转换为毫秒 var date1_ms=date1.getTime(); var date2_ms=date2.getTime(); //以毫秒为单位计算差值 var差分=Math.abs(date1-date2); //返回到天并返回 返回数学圆(差分毫秒/一天); } 是。 必须使用日期对象,如下所示

    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
    
    
    
    试试看


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

    谢谢各位,我只回答问题,如果用户以这种形式输入,我如何才能找到差额?这里有人建议使用新日期('02/09/2009')?为什么你希望它能起作用?但我们的客户要求并给予这样的。。。所以我需要解决这个问题的方法:-(然后解析字符串,将字符串中的值提取为数字。提示:查看函数string.split()和parseInt()谢谢你这么做。@krish-我刚刚更新了我的ans。看看吧…它可能有用。它对我有用。确保date1和date2是字符串,而不是像这样显示1970年2月1日。我只是不想有天的不同。你不觉得把时差设置到另一个日期对象有点多余吗?date1.getTime()-date2.getTime()无论如何都将以毫秒为单位返回差值。您需要使用parseInt指定基数10。如果您不这样做,则说明它无法正确处理“08”和“09”之类的内容。而且您忘记了夏令时。@Robert L:感谢这两个建议,我相应地编辑了我的答案。您忘记了:JavaScript月份编号被1禁用。
    var diff2 =    Date.parse("03/12/2009") - Date.parse("02/09/2009");