JavaScript日期差异-一个小时太多
JavaScript Date Difference - one hour too much
我对JavaScript还很陌生,但我遇到了一个问题。我有一个HTMl5页面,其中有两个类型为time
的输入元素。我想得到这两个时间的差值,这样11:15和12:00会给我0:45。
我认为HTML是非常直接的:
<ul>
<li>
<label>Anfang: </label>
</li>
<li>
<input type="time" id="begin" required="true">
</li>
</ul>
<ul>
<li>
<label>Ende: </label>
</li>
<li>
<input type="time" id="end" required="true"></li>
</ul>
我想这里没什么特别的。在我的JavaScript中,我将一个监听器附加到一个按钮上,该按钮获取这两个字段的值,并将其传递给以下函数以创建过时的日期对象:
function timeToDate(input) {
var hours = input.substring(0, 2);
var min = input.substring(3, 5);
var date = new Date();
date.setHours(hours);
date.setMinutes(min);
return date;
}
为了得到区别,我做了:
var beginDate = timeToDate(begin);
var endDate = timeToDate(end);
var diff = endDate.getTime() - beginDate.getTime();
var b = new Date();
b.setTime(diff);
console.log(b.getHours());
所以,但是11:00(beginDate)和12:00(endDate)的控制台输出是2,但它应该是1,或者我在这里没有得到线索?
setTime()
需要几毫秒UTC。
另一方面,getHours()
会打印您当地时区的小时数。
当您打印getHours()
时,您看到的"一小时太多"是您与UTC的时间偏移。
使用getUTCHours()
可以获得所需的小时数。
我假设你只使用这个算法来计算一个小的正日期差的hours:minutes
表示。那就好了。简单地说,不要试图将其应用于更大的持续时间计算。
使用setTime()
很容易出错,因为您实际设置的是UTC时间1970年1月1日以来的毫秒数。
使用getHours
将在您的时区中生成一天中的时间,这可能与UTC时间不同。
如果您将时间设置为0,就会看到这种情况——getHours()
不一定会产生0。
你也会得到环绕效果,所以如果你的时间增量超过24小时,你会得到一个模24的值。因此,为了用小时计算两次约会之间的差异,我建议你使用常规数学:
var hours = (diff/(1000*60*60))|0;
我认为Date对象不能与时间偏移一起使用。代码diff
包含两次之间的毫秒数。你可以通过除以60*60*1000得到小时数:
var hours=diff/(60*60*1000);
这可能导致分数,例如15分钟的差异将是0.25小时。如果您需要完整的小时数,您可以使用Math.ceil()
或Math.floor()
向上或向下取整,例如:
console.log("Full hours: "+Math.ceil(diff/(60*60*1000)));
- 让谷歌数据图表有一个24小时x轴
- 解析云代码作业:删除在数据库中已经存在一个小时的行
- 试图创建一个24小时计时器来重置自己
- 在ISO转换后,JavaScript时间滞后了一个小时
- 如何获得一个进度元素,它被设置为在窗口调整大小时调整大小
- 日期时间格式增加了一个小时
- 给一个日期加两个小时
- JavaScript日期差异-一个小时太多
- 计算到下一个小时的时间
- Javascript's的date对象toLocaleTimeString添加了一个小时
- 如何找到一个小时的结束和推动一个对象
- 如何在javascript中获得最后一个小时,上个月和昨天
- setUTCHours将传递给函数的时间增加一个小时
- Javascript Date()给出错误的日期一个小时
- 为什么ColdFusion的纪元时间比javascript的纪元时间晚一个小时?
- 给时间加上一个小时,然后格式化返回
- 我如何限制时间到一个小时在日期时间选择器
- 用Javascript倒计时到每周六,然后打开一个3小时的括号
- 我的日期总是超出一个小时——解析JSON日期
- 两个日期之间的JavaScript差异是错误的一个小时