在计算时差时遇到麻烦

时间:2014-07-23 11:46:27

标签: javascript

这是我用来计算时差的javascript代码:

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]);

我正在外出: -600

我希望输出的差异为: 2小时

任何人都可以弄清楚我的代码有什么问题吗?

2 个答案:

答案 0 :(得分:0)

我建议

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;
} 

检查这个小提琴

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

答案 1 :(得分:0)

请多好用一点。

首先,你甚至不看AM或PM。 如果你确定你的时间看起来像这样(而不是时间戳或其他任何东西),你可以这样做(我试着保持你的逻辑):

    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;

事实上,你忘了删除“我”。部分时间。 你也忘了计算它。

此代码可以重构,但我不会完成所有工作。