У меня здесь немного кода, который вычисляет разницу в часах между двумя датами. Вид в убытке здесь. Код попал или пропустил, и я не уверен, почему.
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 и простую выпадающую таблицу со значениями 14:30, 14:45, 15:00 и т.д. Он отлично работает, когда дата то же, но иногда добавляет величину десять, когда дата не то же самое. Например:
01/11/2011 10:30 - 01/11/2011 11:00 утра = 0.50 (правильно)
01/10/2011 10:30 - 01/11/2011 11:00 утра = 24.50 (Правильно)
01/09/2011 10:30 - 01/11/2011 11:00 am = 264.50 (Неверно)
01/08/2011 10:30 - 01/11/2011 11:00 утра = 264.50 (Неверно)
01/07/2011 10:30 - 01/11/2011 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.