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

Posted

技术标签:

【中文标题】在javascript中计算两个日期时间之间的持续时间【英文标题】:Calculate duration between two date times in javascript 【发布时间】:2014-02-28 13:08:03 【问题描述】:

我需要计算 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);

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

【问题讨论】:

您确定timeStarttimeEnd 是有效日期吗? 向我们展示无效的代码。现在“今天”是一个日期对象 它在上面的代码中是正确的。但是当我把它改成 var timeStart=new Date(""+today+""+valuestart+"").getHours();和类似的时间结束,我遇到了问题 【参考方案1】:

您应该以纪元毫秒为单位工作。 想法是将所有内容转换为epoch millis representation,执行您的calculations,然后在需要时返回另一种格式。

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

Get the time difference between two datetimes http://www.htmlgoodies.com/html5/javascript/calculating-the-difference-between-two-dates-in-javascript.html#fbid=AojoSIQKaAL

【讨论】:

【参考方案2】:

tod​​ay 是 Date 类型,而“01/01/2007”是一个字符串。尝试将 Date 对象与“8:00 AM”连接起来是行不通的。您必须将 today 变量转换为字符串或使用 today.setHours(8)

【讨论】:

如何将日期类型转换为字符串 如果你有 jQuery,那就很容易了。 $.datepicker.formatDate('mm/dd/yyyy', 今天); 如果您没有 jQuery,您可能必须使用 Date 对象的内置方法来构建字符串:(today.getMonth() + 1) + '/' + today .getDate() + '/' + today.getFullYear()。类似的东西。 不,我不想使用 datepicker。我会从服务器获取时间【参考方案3】:

试试这个:

        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);

【讨论】:

【参考方案4】:

也许有点晚了。我赞同 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

【讨论】:

认为您需要一些括号围绕该持续时间线:parseInt(duration / (60 * 60 * 1000)) 好的,已编辑,谢谢正确性 感谢您的回答!简洁明了,我在我的程序中使用了它:-)

以上是关于在javascript中计算两个日期时间之间的持续时间的主要内容,如果未能解决你的问题,请参考以下文章

Java 8计算两个日期之间的月份

如何在java中找到两个日期之间的差异持续时间?

如何在Javascript中找到两个日期之间的给定天数? [复制]

计算 2 个日期内的持续时间

JavaScript 计算两个日期之间的营业日

获取 date-fns 中两个日期之间的持续时间,以天:小时:分钟:秒格式