用三个时间值计算时间差

时间:2010-01-09 01:00:56

标签: javascript jquery time

我在计算以HH:mm字符串表示的三个时间值之间的时间(小时:分钟)差异时遇到了问题。

我正在计算一天中的工作时间,午餐时间和时间。

e.g。 var time_worked = time_out - lunch - time_in 或07:00 = 17:00 - 01:00 - 09:00

我熟悉php日期,但javascript日期对象很吓人!

代码:

var time_in = $(".time-in").val(); // 09:00
var time_out = $(".time-out").val(); // 17:00
var lunch = $(".lunch").val(); // 01:00

var time = time_out - lunch - time_in; // should be 07:00 or 7  

5 个答案:

答案 0 :(得分:5)

我建议稍微改变一下......考虑到你的三次,将所有时间转换为纯时间,然后按照几小时的时间进行数学计算。如果需要,您可以将小时数转回几分钟。

只需将分钟数除以60并将结果添加到小时部分,任何时间都可以变成小时。然后你的数学变得非常容易,除了你不必做基于时间的数学运算之外,你的表达式也是一样的。

如果您输入的内容为“hh:mm”,其中hh和mm为整数,那么您可以使用以下表达式计算纯小时

var mytime = "hh:mm";
var temp = mytime.split(":");
var hours = temp[0] + (temp[1]/60);

编辑: 其他人已经注意到如果你处理夜班问题就会出现问题。一个简单的解决方案(不需要创建Date对象)是在结束时间小于开始时间时将24小时添加到开始时间(当然可以在“纯小时”域中完成)。

答案 1 :(得分:2)

我不足以帮助您,但由于您似乎使用了相关的时间,如果您的地方24小时工作,请特别注意跨越午夜的任何班次。星期四7:00 - 星期三23:00 = 8。

答案 2 :(得分:2)

使用getTime()函数,它返回自1970年1月1日以来的毫秒数。所以你的代码看起来像:

var time_worked_ms = time_out.getTime() - lunch.getTime() - time_in.getTime();

time_worked_ms将包含间隔的毫秒数。

答案 3 :(得分:2)

我认为你误解了你的问题领域。

具体来说,如果您正在尝试查找timeAtWork,并且所有内容都被表示为时间对象(例如,自纪元以来的几秒钟内),那么您需要知道的四个重要时刻(您列出的三个[ startWork,endWork和startLunch]以及你错过的那个,[endLunch])。在这种情况下,您可以通过以下减法计算您想要的值,假设您正在使用的任何语言都支持添加/减去日期(对于JavaScript,请查看优秀的date.js库)

timeAtWork = (endWork-endLunch) + (startLunch-startWork)

或平等

timeAtWork = (endWork - startWork) - (endLunch - startLunch)

然而,听起来我有两个'时间'变量[startWork和endWork]和一个'timespan'变量[lunchDuration]。在这种情况下,lunchDuration类似于3600(一小时),但不代表真实的日期/时间组合。

在这种情况下,lunchDuration === (endLunch - startLunch),您可以按如下方式计算timeAtWork:

timeAtWork = (endWork - startWork) - lunchDuration

希望这有帮助!

答案 4 :(得分:0)

给定2个“HH:mm”字符串,以下方法将返回它们之间的浮点数:

function timeDiff(time1, time2) {
    var time1array = time1.split(":");
    var time2array = time2.split(":");
    var hour1 = parseInt(time1array[0]);
    var min1 = parseInt(time1array[1]);
    var hour2 = parseInt(time2array[0]);
    var min2 = parseInt(time2array[1]);
    return (hour1 + min1/60) - (hour2 + min2/60);
}