我在这里有一些代码来计算两个日期时间之间的小时差异。有点不知所措。代码被击中或错过,我不知道为什么。
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 datepicker和一个简单的下拉菜单中获取值,下午2:30,下午2:45,下午3:00等。它工作正常当日期相同时,但有时在日期不相同时增加10级。例如:
编辑,哦,我很抱歉。没有包含parseDate函数。01/11/2011 10:30 am - 01/11/2011 11:00 am = 0.50(正确)
01/10/2011 10:30 am - 01/11/2011 11:00 am = 24.50(正确)
01/09/2011 10:30 am - 01/11/2011 11:00 am = 264.50(不正确)
01/08/2011 10:30 am - 01/11/2011 11:00 am = 264.50(不正确)
01/07/2011 10:30 am - 01/11/2011 11:00 am = 96.50(正确)
// 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。
答案 0 :(得分:1)
问题是你的日期[1]上的parseInt()正在使用前导零。
return new Date(
parseInt(date[2]), parseInt(date[0])-1, parseInt(date[1]),
hm[0], parseInt(hm[1])
);
当你传递像01/09/2011这样的日期时,09被解析为0而不是9。
答案 1 :(得分:0)
date.js解决了您的问题:
var first = Date.parse(01/09/2011 10:30 am);
var second = Date.parse(01/11/2011 11:00 am);
var diffMs = Math.abs(first - second) // difference in milliseconds