Javascript时间跨度没有返回预期的结果
Javascript timespan not returning expected result
我使用这段代码来获取两个日期之间的时间跨度/经过时间
var timein = new Date(year, month, day, tihh1, timm1, 0);
var timeout = new Date(year, month, day, tohh1, tomm1, 0);
var diff = timeout.getTime() - timein.getTime();
var timespan = new Date(diff);
totalHH = parseInt(totalHH) + parseInt(timespan.getUTCHours());
totalMM = parseInt(totalMM) + parseInt(timespan.getUTCMinutes());
这段代码可以工作,但是当时间晚于超时时间时,它不会返回负结果。
的例子:
var timein = new Date(2015, 10, 19, 9, 0, 0); // Oct 19 2015 9:00:00
var timeout = new Date(2015, 10, 19, 8, 0, 0); // Oct 19 2015 8:00:00
// Oct 19 2015 8:00:00 - Oct 19 2015 9:00:00
预期结果:-1 (Hour)
实际成绩:23(小时)
代码正常运行
相减后,diff
等于-3600000
, timespan
用此值初始化。
new Date(value)
构造函数创建一个Date
对象,该对象等于Unix纪元开始(01/01/1970 00:00:00 UTC)加上value
毫秒。由于value
在本例中为负值,new Date(-3600000)
将被求值为31/12/1969 23:00:00 UTC
(在Unix纪元前一小时)。
现在,应用timespan.getUTCHours()
,它等于23。
在我看来,在这种情况下最简单的方法是使用一个简单的数学代替Date
对象,因为它不应该这样工作。
例如,在您的例子中,日期01 Jan 2015 00:00:00
和03 Jan 2015 00:00:00
的结果将是0
,而正确的答案是48小时。
只需根据算术计算值,如下所示:
function writeHHMM(timein, timeout)
{
var totalMinutes = (timeout - timein) / 60000;
var totalHH = Math.floor(totalMinutes / 60); // Math.floor provides integer only values
var totalMM = Math.floor(totalMinutes % 60); // and cuts off seconds
document.body.innerHTML += "<br/> " + totalHH + " hours, " + totalMM + " minutes";
}
writeHHMM(new Date(2015, 10, 19, 9, 0, 0), new Date(2015, 10, 19, 8, 0, 0));
writeHHMM(new Date(2015, 10, 19, 9, 0, 0), new Date(2015, 10, 21, 9, 0, 0));
writeHHMM(new Date(2015, 10, 19, 9, 0, 0), new Date(2014, 7, 3, 5, 15, 13));
相关文章:
- 是否可以将JXBrowser显示的JS确认对话框的结果返回到调用它的JS部分
- 将字符串结果返回到表单元格中的新行中
- 如何从批处理文件调用一个带有2个参数的java脚本函数,并将结果返回到环境变量
- 使用 JSON 和 ExtJS 将 MPDF 结果返回给浏览器
- 将信息结果返回到多个输入字段
- 如何将变量从javascript发送到php并将结果返回给JS
- 将 JavaScript 变量传递给 PHP,并将 PHP 结果返回给 JavaScript 变量
- 当没有结果返回 JavaScript 搜索时显示消息
- 加载相同的结果返回按钮
- 如果搜索框位于_SiteLayout页(在页眉 DIV 中),如何将搜索结果返回给用户
- MVC C#中的自定义操作结果返回特定视图
- 使用javascript/lodash对特定键的相同值进行分组,并对其进行计数,然后将结果返回到数组
- 如何使用javascript将循环结果返回到列中
- 结果返回为“未定义”
- 搜索未检测到结果返回-Selectize.js
- 调用一个打开活动并将活动结果返回给javascript的java函数
- 将PHP结果返回到原始html页面
- ASP.. NET MVC控制器结果返回到视图
- 如何通过AJAX传递值来更改SQL搜索查询并将结果返回给HTML ?
- Asp.net MVC或javascript将另一个页面的结果返回给方法