date - 如何计算两个日期时间值之间的时差

标签 date time

我正在尝试计算 2 个日期时间字符串之间的时差。

我有 2 个输入,其中输入字符串类似于“1:00 PM”,第二个是“3:15 PM”。我想知道时差。所以对于上面的例子,我想显示 3.15

我做了什么:

  • 将时间转换为 24 小时格式。所以“1:00 PM”变成了“13:00:00”
  • 将新时间附加到日期,如下所示:new Date("1970-1-1 13:00:00")
  • 像这样计算差异:

  • 代码:
    var total = Math.round(((new Date("1970-1-1 " + end_time) - 
                             new Date("1970-1-1 " + start_time) ) / 1000 / 3600) , 2 )
    

    但是总数总是返回整数而不是小数,所以“1:00 PM”和“3:15 PM”之间的差异是 2 而不是 2.15。

    我也试过这个(使用 jQuery,但这无关紧要):
    $('#to_ad,#from_ad').change(function(){
        $('#total_ad').val( getDiffTime() );
    });
    
    function fixTimeString(time){
        var hours = Number(time.match(/^(\d+)/)[1]);
        var minutes = Number(time.match(/:(\d+)/)[1]);
        var AMPM = time.match(/\s(.*)$/)[1];
        if(AMPM == "PM" && hours<12) hours = hours+12;
        if(AMPM == "AM" && hours==12) hours = hours-12;
        var sHours = hours.toString();
        var sMinutes = minutes.toString();
        if(hours<10) sHours = "0" + sHours;
        if(minutes<10) sMinutes = "0" + sMinutes;
        return sHours + ':' + sMinutes + ':00';
    }
    
    function getDiffTime(){
        var start_time = fixTimeString($('#from_ad').val());
        var end_time = fixTimeString($('#to_ad').val());
        var start = new Date("1970-1-1 " + end_time).getTime(),
        end   = new Date("1970-1-1 " + start_time).getTime();
        return parseInt(((start  - end) / 1000 / 3600, 10)*100) / 100;
    }
    

    但是total_ad输入仅显示整数值。

    我该如何解决这个问题?

    最佳答案

    Math.round舍入到最接近的整数,改为乘除

    var start = new Date("1970-1-1 " + start_time).getTime(),
        end   = new Date("1970-1-1 " + end_time).getTime();
    
    var total = (parseInt(((start-end) / 1000 / 3600)*100, 10)) / 100;
    

    FIDDLE

    当你把时间 15:15:00 减去 13:00:00 时,你剩下 2.15 小时,而不是 3.15,即使没有确保只有两位小数,这个例子也会返回 2.15,但在其他时候可能并非如此。
    您也可以使用 toFixed(2) ,但这会给您留下 3.00 而不是 3 等。

    关于date - 如何计算两个日期时间值之间的时差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21080336/

    相关文章:

    Java - 将带有时区的unix时间(以毫秒为单位)转换为时间戳

    java - 在 Java 中存储简单的小时/分钟信息 - 最佳实践问题

    performance - 当给定迭代次数和总时间时,如何找到算法的时间复杂度?

    string - 如何使用时间包将时间格式化为 “2nd Jan 2006”时间格式的字符串

    javascript - angular 如何从 "yyyy-mm-ddT00:00:00"等格式按日期订购项目

    javascript - 如何确保结束日期总是比开始日期多 7 天?

    Javascript 获取自 2012 年初以来的时间(以毫秒为单位)

    javascript - 使用 JS Date 对象以毫秒为单位获取当前时间的最快最轻的方法

    java - 处理时间措施的最佳方法?

    java - Unix 时间戳(UTC)和 Java UTC 相同吗?我们可以比较吗?