我想用JavaScript或jquery计算22:00(今天)和06:00(明天)之间的小时数。如果开始时间= 23:10,停止时间= 05:20 工作时间为06:10,因为从今天的23:10(明天)到05:20(明天)有06:10的时间。
我有两个输入字段:
<input type="text" name="startTime" autocomplete="off" style="display:inline;width: 90px;" id="startTime" class="timepicker"/>
<input type="text" name="stopTime" autocomplete="off" style="display: inline;width: 90px;" id="stopTime" class="timepicker1"/>
我的JavaScript代码是:
var start_time = $('#startTime').val();
var end_time = $('#stopTime').val();
var diff = ( new Date("1970-1-1 " + end_time) - new Date("1970-1-1 " + start_time) ) / 60000 / 60;
var decimalTimeString = diff;
var n = new Date(0,0);
n.setSeconds(+decimalTimeString * 60 * 60);
var test = n.toTimeString().slice(0, 8);
$('#workingValue').val(test);
此javascript代码有效,但仅计算00:00到23:45之间的小时数,例如如果开始时间= 00:00且停止时间= 23:45 workingValue = 23:45,则正确。但是,如果开始时间为22:00(例如),停止时间为01:00,则我的工作值不正确。它返回我00:00,但必须是03:00。请帮助我解决问题! 附言对不起,我的英语,但这不是很好!
答案 0 :(得分:1)
您可以使用moment
在代码段中,您可以显示一个示例
let now = "10/10/2018 15:00:00";
let then = "07/10/2018 14:20:30";
let ms = moment(now,"DD/MM/YYYY HH:mm:ss").diff(moment(then,"DD/MM/YYYY HH:mm:ss"));
let d = moment.duration(ms);
let s = Math.floor(d.asHours()) + moment.utc(ms).format(":mm:ss");
document.getElementById("time").innerText = s
<script src="https://momentjs.com/downloads/moment.js"></script>
<div id="time"></div>
答案 1 :(得分:1)
使用帖子中的信息,即您只有两个没有日期信息的时间字符串,您可以在Vanilla JavaScript中执行以下操作:
const ge=id=>document.getElementById(id);
const res=ge('result'), st=ge('start'), en=ge('end');
document.forms[0].addEventListener('keyup',function(el){
res.innerHTML=new Date(new Date('1970-1-2 '+en.value)
-new Date('1970-1-1 '+st.value)).toGMTString().substr(17,5);
})
<form>
<input id="start" value="22:30"> start<br>
<input id="end" value="2:00"> end<br>
</form>
<div id="result"></div>
答案 2 :(得分:0)
当您使用 00:00 和 23:45 计算此计算时,它会给出正结果,所以可以,但是在相反的情况下,我们说< em> 23:45 00:00 它将给出减去结果
var diff = ( new Date("1970-1-1 " + end_time) - new Date("1970-1-1 " + start_time) ) / 60000 / 60;