-2

I try compare two different time to produce the difference time.

var start_time;
var end_time;

start_time = $('#startTime').val();
end_time = $('#endTime').val();

values received are,

start_time : 5:08 PM
end_time   : 6:08 PM

here, how can get a difference time as 1 hr from these time ?

Expected output: 01:00

Is this possible with JavaScript ?

php-dev
  • 6,998
  • 4
  • 24
  • 38
Shankar Thiyagaraajan
  • 1,705
  • 4
  • 28
  • 46

4 Answers4

1

Hope this snippet will be useful

function getDifference(t1, t2) {
  //first splitting by white space. FOr example 5:08 PM will be 5:08 and again splitting by :
  var _t1 = (t1.split(" ")[0].split(":")),
    // converting to number to get the time in minute
    toNum1 = Number(_t1[0]) * 60 + Number(_t1[1]),
    _t2 = (t2.split(" ")[0].split(":")),
    toNum2 = Number(_t2[0]) * 60 + Number(_t2[1]),
    // calulating difference
    dif = toNum2 - toNum1;

  var result = ''
  if (dif % 60 === 0) {
    result = dif % 60 + ':00'
  } else if (dif % 60 < 10) {
    result = Math.floor(dif / 60) + ':0' + dif % 60

  } else if (dif % 60 > 10) {
    result = Math.floor(dif / 60) + ':' + dif % 60
  }
  return result


}

console.log(getDifference("5:08 PM", "6:59 PM"))
brk
  • 48,835
  • 10
  • 56
  • 78
1

Filter to time string part, parse to numbers, compensate for AM/PM (why not just use 24 hours model?) and return array of differences.

/**
 * Takes time as "... Hours:Minutes ..." and returns array of integers "[hours, minutes]"
 *
 * @param {string} time
 * @returns
 */
function splitTime(time) {
  return /\d{1,2}:\d{1,2}/ig
    .exec(time)
    .pop()
    .split(":")
    .map(function(a) {
      return parseInt(a, 10);
    });
}

function timeDifference(from, to) {
  var t1 = splitTime(from);
  var t2 = splitTime(to);
  if (from.toLowerCase().indexOf("pm") >= 0) {
    t1[0] = t1[0] + 12;
  }
  if (to.toLowerCase().indexOf("pm") >= 0) {
    t2[0] = t2[0] + 12;
  }
  var diff = [t2[0] - t1[0], t2[1] - t1[1]];
  return diff;
}
console.log("Raw return:", timeDifference("5:08 AM", "6:08 AM"));
console.log("Formatting return:", timeDifference("5:08 AM", "6:08 AM").join(":"));
Emil S. Jørgensen
  • 6,216
  • 1
  • 15
  • 28
0

var start_time = "5:08 PM"
var end_time = "6:10 PM"
var d1 = Date.parse('1/1/2000 '+start_time)
var d2 = Date.parse('1/1/2000 '+end_time)
var diff = (d2-d1)/(60*1000)
var h = Math.floor(diff/60)
var m = diff-h*60
var result = h+":"+("00"+m).slice(-2)
document.write(result)
Michał Sałaciński
  • 2,256
  • 1
  • 11
  • 10
-1

You can use pure javascript but moment will be better. A not ended example would be something like that:

    var date1 = new Date();
    date1.setHours('5:08 PM'.split(':')[0]); //Not checking PM or AM
    date1.setMinutes( ....
    return (Math.abs(date1.getTime()-date2.getTime()) / (1000*60*60)) % 24 //returning only hours you will need to add seconds
kimy82
  • 4,069
  • 1
  • 22
  • 25