首先想提一下,我搜索了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;
}
答案 0 :(得分:0)
你在onclick上调用的函数ce()
在哪里?
如果您已将代码粘贴到一个HTML文件中并加载它,则var a
和vab 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"/>
Minutes:<input id="time_spent_mins" type="text" size="2"/>
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;
}