1

我有两次 in_time 和 out_time。我想使用 javascript 添加这两次。我该怎么做?in_time 和 out_time 的值来自文本框。我的html代码是

<div>   
<b>PunchIn</b>
    <input type="text" id="intime" class="time" placeholder="09:00:00" />
    <p class="error">PunchTime is not valid</p>
</div>
<br/>
<div>   
    <b>OutTime</b>
    <input type="text" id="brktime" class="time" placeholder="06:00:00" />
    <p class="error1">OutTime is not valid</p>
</div>

您可以从Demo中查看代码

4

5 回答 5

10

将时间转换为秒,相加,然后格式化结果:

function toSeconds(s) {
  var p = s.split(':');
  return parseInt(p[0], 10) * 3600 + parseInt(p[1], 10) * 60 + parseInt(p[2], 10);
}

function fill(s, digits) {
  s = s.toString();
  while (s.length < digits) s = '0' + s;
  return s;
}

var sec = toSeconds(intime) + toSeconds(out);

var result =
  fill(Math.floor(sec / 3600), 2) + ':' +
  fill(Math.floor(sec / 60) % 60, 2) + ':' +
  fill(sec % 60, 2);

演示:http: //jsfiddle.net/Guffa/JLh6W/

于 2013-04-08T12:16:28.717 回答
4

这是javascript,还包括第二次计算

试试这个,

var a = "17.30.15hrs"
var b = "1.30.20hrs"

alert(addtime(a, b));

var a = "23.00.25hrs"
var b = "1.30.60hrs"

alert(addtime(a, b));

function addtime(start_time, end_time) {
    var startArr = start_time.replace('hrs', '', start_time).split('.');
    var endArr = end_time.replace('hrs', '', end_time).split('.');

    var d = new Date();
    startArr[0] = (startArr[0]) ? parseInt(startArr[0], 10) : 0;
    startArr[1] = (startArr[1]) ? parseInt(startArr[1], 10) : 0;
    startArr[2] = (startArr[2]) ? parseInt(startArr[2], 10) : 0;
    endArr[0] = (endArr[0]) ? parseInt(endArr[0], 10) : 0;
    endArr[1] = (endArr[1]) ? parseInt(endArr[1], 10) : 0;
    endArr[2] = (endArr[2]) ? parseInt(endArr[2], 10) : 0;

    d.setHours(startArr[0] + endArr[0]);
    d.setMinutes(startArr[1] + endArr[1]);
    d.setSeconds(startArr[2] + endArr[2]);

    var hours = d.getHours();
    var minutes = d.getMinutes();
    var seconds = d.getSeconds();

    return hours + '.' + minutes + '.' + seconds + 'hrs';
}

演示:http: //jsfiddle.net/AXVPf/7/

更新了第二次计算

于 2013-04-18T05:30:45.823 回答
1

https://github.com/timrwood/moment分钟库涵盖了您需要的大部分内容。还可以查看 Google Closure Library 日期实现。http://closure-library.googlecode.com/svn/docs/namespace_goog_date.html

于 2013-04-08T12:11:02.500 回答
0

您可以使用下面的函数将时间字符串转换为数字,然后您可以将它们加在一起

function getTimeAsSeconds(time){
    var timeArray = time.split(':');
    return Number(timeArray [0]) * 3600 + Number(timeArray [1]) * 60 + Number(timeArray[2]);
}

就像是:

var timeInSeconds = getTimeAsSeconds(document.getElementById('intime').value) + getTimeAsSeconds(document.getElementById('brktime').value);
于 2013-04-08T12:13:42.683 回答
0

那里有很多图书馆(没有进行谷歌搜索,但@alex23 有一个)。但是,过程通常是相同的。将字符串转换为最小公分母。在这种情况下秒。获得秒数后,将两者加在一起,然后再次将其转换回小时分秒。正如@codebox 演示的那样,这些转换是简单的乘法和除法。

于 2013-04-08T12:16:52.630 回答