0

this is my javascript code to calculate time difference:

var startTime = '11:30 am';
var EndTime = '1:30 pm';
var ed = EndTime.split(':');
var st = startTime.split(':');
var sub = parseInt(ed[0]) * 60 + parseInt(ed[1]);
var sub1 = parseInt(st[0]) * 60 + parseInt(st[1]);

i am getting outout:-600

i want difference in output as:2 hour.

can anybody figure out whats wrong with my code??

Sourav 'Abhi' Mitra
  • 2,390
  • 16
  • 15
user3831519
  • 59
  • 15

2 Answers2

0

I would suggest

function diff(start, end) {
start = start.split(":");
end = end.split(":");
var startDate = new Date(0, 0, 0, start[0], start[1], 0);
var endDate = new Date(0, 0, 0, end[0], end[1], 0);
var diff = endDate.getTime() - startDate.getTime();
var hours = Math.floor(diff / 1000 / 60 / 60);
diff -= hours * 1000 * 60 * 60;
var minutes = Math.floor(diff / 1000 / 60);

return (hours < 9 ? "0" : "") + hours + ":" + (minutes < 9 ? "0" : "") + minutes;
} 

Check this fiddle

http://jsfiddle.net/shubhambhave/D9M8a/

Shubham Bhave
  • 383
  • 6
  • 17
0

Please, use more your mind.

First, you're not even looking at the AM or PM. If you are sure your times will look like this (and not timestamp or anything else), you can do this (I try to keep your logic here):

    var startTime = '11:30 am';
    var endTime = '1:30 pm';
    var st = startTime.split(':');
    var ed = endTime.split(':');
    if ((st[1].split(' '))[1] == 'pm')
        st[0] = parseInt(st[0]) + 12;
    if ((ed[1].split(' '))[1] == 'pm')
        ed[0] = parseInt(ed[0]) + 12;
    st[1] = (st[1].split(' '))[0];
    ed[1] = (ed[1].split(' '))[0];

    var diff = ((ed[0] * 60 + ed[1] * 60) - (st[0] * 60 + st[1] * 60)) / 60;

In fact, you forgot to remove the 'am' part of the time. You also forget to calculate it.

This code can be refactored, but i'm not gonna do all the job.

Larta
  • 406
  • 2
  • 9