Javascript 日期时间差

Javascript 日期时间差,javascript,Javascript,我这里有一些代码,可以计算两个日期时间之间的小时差。有点不知所措。代码是命中还是未命中,我不知道为什么 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)

我这里有一些代码,可以计算两个日期时间之间的小时差。有点不知所措。代码是命中还是未命中,我不知道为什么

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));
日期
时间
正确填充,从jQuery UI日期选择器和一个简单的下拉列表中选择值为2:30 pm、2:45 pm、3:00 pm等。当日期相同时,它可以正常工作,但当日期不相同时,有时会增加10个量级。例如:

2011年11月1日上午10:30-2011年11月1日上午11:00=0.50(正确)

2011年10月1日上午10:30-2011年11月1日上午11:00=24.50(正确)

2011年9月1日上午10:30-2011年11月1日上午11:00=264.50(不正确)

2011年8月1日上午10:30-2011年11月1日上午11:00=264.50(不正确)

2011年7月1日上午10:30-2011年11月1日上午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。

问题在于日期[1]上的parseInt()使用了前导零

return new Date(
    parseInt(date[2]), parseInt(date[0])-1, parseInt(date[1]),
    hm[0], parseInt(hm[1])
);
当您通过2011年9月1日这样的日期时,09将被解析为0,而不是9。

解决了您的问题:

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

提及包含所有函数定义的完整代码…执行更多调试:显示/警报/记录d1和d2的值,以便确保正确读取输入设置。另外,您可能希望确保diff是一个正数。这可能会对您有所帮助-查看date.js库。方便的最好发布一个展示这种行为的示例页面。我将执行控制台输出,以确保您的parseDate方法为d1/d2获取正确的值。我认为您可能是对的。但是你怎么解释呢?2010年6月9日上午11:30——2010年5月31日星期一上午11:30:00 GMT-0400(美国东部时间),2010年7月6日上午11:30——2010年6月7日星期一上午11:30:00 GMT-0400(美国东部时间)我可以不格式化评论吗?不管怎么说,它对09的解析不正确,但对07的解析正确吗?哇,这很有趣。parseInt(“09”)返回0,但parseInt(“07”)返回7。更改parseInt以指定基数。例如,parseInt(日期[1],10])更多信息,请参见。