在javascript中计算两个日期时间之间的持续时间

时间:2014-02-04 14:01:57

标签: javascript datetime

我需要在JavaScript中计算两个日期时间之间的持续时间。我试过这段代码:

            var today = new Date();
            var dd = today.getDate();
            var mm = today.getMonth()+1; //January is 0!

            var yyyy = today.getFullYear();
            if(dd<10){dd='0'+dd} if(mm<10){mm='0'+mm} today = mm+'/'+dd+'/'+yyyy;  //Current Date
            console.log("current date"+today);


            var valuestart ="8:00 AM";
            var valuestop = "4:00 PM";//$("select[name='timestop']").val();

            //create date format          
            var timeStart = new Date("01/01/2007 " + valuestart).getHours();
            var timeEnd = new Date("01/01/2007 " + valuestop).getHours();

            var hourDiff = timeEnd - timeStart;             
            console.log("duration"+hourDiff);

由此,我可以获得当前日期和持续时间。但是当我用“今天”变量替换日期“01/01/2007”时,我得到的结果是NaN。请指导我在哪里错了。提前谢谢。

4 个答案:

答案 0 :(得分:2)

你应该在纪元毫秒上工作。 我们的想法是将所有内容转换为epoch millis representation,执行calculations,然后根据需要返回其他格式。

有很多关于这个主题的文章:

答案 1 :(得分:2)

试试这个:

        var today = new Date();
        var dd = today.getDate();
        var mm = today.getMonth()+1; //January is 0!

        var yyyy = today.getFullYear();
        if(dd<10){dd='0'+dd} if(mm<10){mm='0'+mm} today = dd+'/'+mm+'/'+yyyy;  //Current Date

        var valuestart ="8:00 AM";
        var valuestop = "4:00 PM";//$("select[name='timestop']").val();

        //create date format  
        var timeStart = new Date(today + " " + valuestart).getHours();
        var timeEnd = new Date(today + " " + valuestop).getHours();

        var hourDiff = timeEnd - timeStart;  
        alert("duration:"+hourDiff);

答案 2 :(得分:1)

今天是日期类型,而“01/01/2007”是一个字符串。尝试将Date对象与“8:00 AM”连接起来是行不通的。你必须将今天变量变成一个字符串或使用today.setHours(8)

答案 3 :(得分:0)

也许有点晚了。我附和 Christophe Roussy 的回答。 先计算UTC格式的差,然后转单位-小时。 我认为它更容易理解和维护。 这是代码

var date1 = new Date(`some_valid_start_date_format`);
var date2 = new Date(`some_end_start_date_format`);

var duration = date2.valueOf() - date1.valueOf(); // The unit is millisecond
var hourDiff = parseInt(duration / 60 * 60 * 1000) // Turn the duration into hour format