JavaScript错误的时间显示在两个时间之间
JavaScript incorrect time showing between two time
我尝试在页面加载时显示两个时间之间的时间。请检查下面我的代码-
var start = document.getElementById("start").value;
var end = document.getElementById("end").value;
function hourDiff(start, end) {
start = start.split(":");
end = end.split(":");
var startDate = new Date(0, 0, 0, start[0], start[1], 0);
var endDate = new Date(0, 0, 0, end[0], end[1], 0);
var diff = endDate.getTime() - startDate.getTime();
var hours = Math.floor(diff / 1000 / 60 / 60);
diff -= hours * 1000 * 60 * 60;
var minutes = Math.floor(diff / 1000 / 60);
return (hours < 9 ? "0" : "") + hours + ":" + (minutes < 9 ? "0" : "") + minutes;
//setTimeout(function(){hourDiff(start, end)},500);
}
document.getElementById("diff").value = hourDiff(start, end);
<input id="start" value="20:00"> <!-- 08.00 PM -->
<input id="end" value="09:30"> <!-- 09.30 AM -->
<input id="diff">
我已经使用了开始时间20.00
和结束时间09.30
,两个时间之间的差异是= 13.30
小时,但它显示错误的小时。请检查并让我知道。
我还想知道还剩多少hour:minute:second
如果你的日期都是相同的格式hh:mm,为什么不试试我的建议
这很简单:
var hours = end[0] - start[0];
if(start[0] > end[0]) {
hours = 24 + hours;
}
var minutes = end[1] - start[1];
if(start[1] > end[1]) {
minutes = 60 + minutes;
if(hours == 0) {
hours = 23;
} else {
hours--;
}
}
我只是把它们彼此相减,如果开始值大于结束值就会做出反应。小提琴:https://jsfiddle.net/rvwr9h0w/1/
编辑
我找到了一个更简单的解决方案,因为Shotgun Ninja的帖子:
https://jsfiddle.net/rvwr9h0w/4/var endDate = new Date(0, 0, (start > end)?1:0 , end[0], end[1], end[2]);
如果开始时间大于结束时间,只需将结束日期提前1天。
好的,这里代码的问题是,您正在从较晚的时间减去较早的时间,这将导致负时差。我认为你的意思是让系统从前一天的晚上8点减去第二天的早上9点30分,但是你没有提供任何信息表明它们是分开的日子。你有
:
var startDate = new Date(0, 0, 0, 20, 0, 0); // 8:00pm, Dec 31st, 1899 (current TZ)
var endDate = new Date(0, 0, 0, 9, 30, 0); // 9:30am, Dec 31st, 1899 (current TZ)
(Year = 0对应1900,Month = 0对应1月,Day = 0对应1号前1天,回滚到12月31日)
这里重要的部分是,通过将所有值设置为0,您将获得相同的一天,但不同的小时。所以你实际上得到了一个负的值;代码正常运行,但由于日期顺序颠倒,因此给出的小时值为负。
尝试使用数学。楼面与各部分所需的整个数学方程:
var start = document.getElementById("start").value;
var end = document.getElementById("end").value;
function hourDiff(start, end) {
start = start.split(":");
end = end.split(":");
var startDate = new Date(0, 0, 0, start[0], start[1], 0);
var endDate = new Date(0, 0, 0, end[0], end[1], 0);
var diff = endDate.getTime() - startDate.getTime();
var msec = diff;
var hh = Math.floor(msec / 1000 / 60 / 60);
msec -= hh * 1000 * 60 * 60;
var mm = Math.floor(msec / 1000 / 60);
return hh + ":" + mm;
//setTimeout(function(){hourDiff(start, end)},500);
}
document.getElementById("diff").value = hourDiff(start, end);
<input id="start" value="20:00"> <!-- 08.00 PM -->
<input id="end" value="09:30"> <!-- 09.30 AM -->
<input id="diff">
相关文章:
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 将两个Json提要合并为一个,并按时间排序
- 两个日期时间选择器
- Javascript-如何使用bootstrap日期时间选择器自动计算两个时间输入之间的差异
- 用时间戳获取两个不同日期之间的时间差
- Mongoose查询在两个日期时间之间提取数据
- 如何将日期和时间拆分为两个元素
- 速度.js动画两个属性时持续时间不同
- 如何在javascript中计算两个日期时间之间的差异
- 比较两个时间戳天数
- 用户如何获取两个时间戳之间的对象
- 如何比较两个时间戳的值
- 如何在javascript中比较两个日期时间
- 如何使用JS/jQuery验证两个下拉字段中的时间值
- 返回两个日期时间单元格之间的差值
- 比较D3.js中的两个时间对象
- 如何在 24 小时制下计算两个时间之间的时差
- 如何在提交之前比较两个日期时间类型的输入
- 如何在Meteor中使用两个按时间排序的不同模板显示两个不同的集合
- Javascript日期时间两个小时