得到从开始结束时间javascript NaN错误花费的分钟数

时间:2014-04-16 10:18:25

标签: javascript html

首先想提一下,我搜索了SO并且无法找到这个具体问题的答案。有关于这个主题的帖子在那里我得到了下面的代码和google上的其他地方。

问题:我正在尝试从开始和结束时间戳中获取确切的分钟数。问题在于,我不知道如何在我的时间戳中分隔“:”,这会导致“NaN”错误。

HTML页面

<input type="text" id="start_time">
<input type="text" id="end_time">
<input type="text" id="minutes_spent">
<input type="button" onclick="ce()">

使用Javascript:

function toSeconds(time_str) {
var parts = time_str.split(':');

return parseInt(parts[0]) * 3600
+
parseInt(parts[1]) * 60 + 
+
parseInt(parts[2]);

var a = document.getElementByID('start_time').value;
var b = document.getElementByID('end_time').value;

var difference = Math.abs(toSeconds(a) - toSeconds(b));

var result = [ Math.floor(difference / 3600), Math.floor((difference % 3600) / 60), difference % 60 ];

result = result.map(function(v) { return v < 10 ? '0' + v : v; }).join(':');

document.getElementByID('minutes_spent').value = result;
}

2 个答案:

答案 0 :(得分:0)

你在onclick上调用的函数ce()在哪里?

如果您已将代码粘贴到一个HTML文件中并加载它,则var avab b将为空。因为两个输入字段在加载时都是空的,并且你的JS将开始执行(根据我上面可以看到的代码)。

逻辑上它看起来很好,尝试创建模块化函数并执行上面的代码。

答案 1 :(得分:0)

以下代码将获取时间戳的用户输入并给出差异 jsFiddle

HTML:

START:<input id="start_time" type="text"/>format "HH:MM:SS"<br/><br/>
END:<input id="end_time" type="text"/>format "HH:MM:SS"<br/><br/>
<input type="button" id="diff" onclick="getDiff()" value="Calc"/>
<br/><br/>
Hours:<input id="time_spent_hours" type="text" size="3"/>&nbsp;&nbsp;
Minutes:<input id="time_spent_mins" type="text" size="2"/>&nbsp;&nbsp;
Seconds:<input id="time_spent_secs" type="text" size="2"/>

JS:

function getDiff() {
 var ts1 = document.getElementById('start_time').value;
 var ts2 = document.getElementById('end_time').value;
 if((/[0-9]?[0-9]:[0-9]?[0-9]:[0-9]?[0-9]/).test(ts1)==false) {
   alert("start time format is wrong");
   return;
 }
 if((/[0-9]?[0-9]:[0-9]?[0-9]:[0-9]?[0-9]/).test(ts2)==false) {
   alert("end time format is wrong");
   return;
 }
 var arr1 = ts1.split(":");
 var arr2 = ts2.split(":");
 var hrs = "0";
 var mins = "0";
 var secs = "0";
 var secs = (parseInt(arr2[0])*60*60 + parseInt(arr2[1])*60 + parseInt(arr2[2])) - (parseInt(arr1[0])*60*60 + parseInt(arr1[1])*60 + parseInt(arr1[2]));
 if(secs<0) {
   alert("start time is greater than end time");
   return;
 }
 if(secs>60) {
   mins = Math.round(secs/60);
   secs = secs%60;
   if(mins>60) {
     hrs = Math.round(mins/60);
     mins = mins%60;
   }
 }
 document.getElementById('time_spent_secs').value = secs;
 document.getElementById('time_spent_mins').value = mins;
 document.getElementById('time_spent_hours').value = hrs;
}