日期时间之间的差异

Difference Between Datetimes

本文关键字:之间 时间 日期      更新时间:2023-09-26

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

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));

datetime填充正确,从jQuery UI日期选择器和一个简单的下拉列表中提取,下拉列表的值为下午2:30、下午2:45、下午3:00等。当日期相同时,它可以正常工作,但有时当日期不相同时,会增加10的幅度。例如:

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

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

问题是您在date[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。

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