如何计算2个日期时间值之间的时差

Mik*_*ike 5 time date

我想计算2个日期时间字符串之间的时差.

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

我做了什么:

  1. 将时间转换为24小时格式.所以"下午1点"变成"13:00:00"
  2. 把新时间贴上这样的日期: new Date("1970-1-1 13:00:00")
  3. 像这样计算差异:

码:

var total = Math.round(((new Date("1970-1-1 " + end_time) - 
                         new Date("1970-1-1 " + start_time) ) / 1000 / 3600) , 2 )
Run Code Online (Sandbox Code Playgroud)

但是总数总是返回整数而不是小数,所以"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;
}
Run Code Online (Sandbox Code Playgroud)

total_ad输入仅显示整数值.

我该如何解决这个问题?

ade*_*neo 1

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;
Run Code Online (Sandbox Code Playgroud)

小提琴

当您取时间 15:15:00 并减去 13:00:00 时,您剩下 2.15 小时,而不是 3.15,即使不确保只有两位小数,此示例也会返回 2.15,但对于其他时间情况可能并非如此。
您也可以使用toFixed(2),但这将使您得到 3.00 而不是 3 等。