【发布时间】:2012-02-04 10:16:33
【问题描述】:
我这里有一些代码可以计算两个日期时间之间的小时差。这里有点不知所措。代码被击中或错过,我不知道为什么。
var date = tr.find('td:eq(10) input').val();
var time = tr.find('td:eq(10) option:selected').val();
var d1 = parseDate(date,time);
date = tr.find('td:eq(11) input').val();
time = tr.find('td:eq(11) option:selected').val();
var d2 = parseDate(date,time);
var diff = d2.getTime() - d1.getTime();
var hoursTd = tr.find('td:eq(12)');
hoursTd.html((diff/3600000).toFixed(2));
date 和 time 已正确填充,从 jQuery UI 日期选择器和一个简单的下拉列表中提取,值为下午 2:30、下午 2:45、下午 3:00 等。当日期为相同,但有时在日期不同时会增加十个数量级。例如:
2011 年 1 月 11 日上午 10:30 - 2011 年 1 月 11 日上午 11:00 = 0.50(正确)
2011 年 1 月 10 日上午 10:30 - 2011 年 1 月 11 日上午 11:00 = 24.50(正确)
2011 年 1 月 9 日上午 10:30 - 2011 年 1 月 11 日上午 11:00 = 264.50(不正确)
2011 年 1 月 8 日上午 10:30 - 2011 年 1 月 11 日上午 11:00 = 264.50(不正确)
2011 年 1 月 7 日上午 10:30 - 2011 年 1 月 11 日上午 11:00 = 96.50(正确)
编辑,哦,天哪,我很抱歉。不包含 parseDate 函数。
// Date m/d/Y Time h:m a
function parseDate(date,time) {
date = date.split("/");
time = time.split(" ");
hm = time[0].split(':');
if (parseInt(hm[0]) == 12) {
hm[0] = 0;
}
if (time[1] == 'pm') {
hm[0] = parseInt(hm[0]) + 12;
} else {
hm[0] = parseInt(hm[0]);
}
return new Date(
parseInt(date[2]), parseInt(date[0])-1, parseInt(date[1]),
hm[0], parseInt(hm[1])
);
}
编辑,好的,所以parseInt 是罪魁祸首。 parseInt("09") 返回 0。"08" 也是如此。奇怪的是,parseInt("07") 返回 7。而 1-6 也正确返回。有人告诉Javascript。
【问题讨论】:
-
提及包含所有函数定义的完整代码...
-
进行更多调试:显示/警报/记录 d1 和 d2 的值,以便确保正确读取输入设置。此外,您可能需要确保 diff 是一个正数。
-
也许这可以帮助你 - stackoverflow.com/questions/1576753/…
-
看看 date.js 库。好用!
-
最好发布一个展示该行为的示例页面。我会做控制台输出,以确保您的 parseDate 方法获得正确的 d1/d2 值。
标签: javascript