【问题标题】:Calculate duration between two date times in javascript在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();和类似的时间结束,我遇到了问题

标签: javascript datetime


【解决方案1】:

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

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

【讨论】:

    【解决方案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))
      • 好的,已编辑,谢谢正确性
      • 感谢您的回答!简洁明了,我在我的程序中使用了它:-)
      猜你喜欢
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 2020-12-25
      • 2014-02-18
      • 1970-01-01
      • 2021-01-03
      • 1970-01-01
      相关资源
      最近更新 更多