Разница между датами - PullRequest
       6

Разница между датами

0 голосов
/ 06 января 2012

У меня есть немного кода, который вычисляет разницу в часах между двумя датами. Вид в недоумении здесь. Код ударил или пропустил, и я не уверен, почему.

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 и простого раскрывающегося списка со значениями 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 = 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 (правильно)

Edit, Oh my, прости. Не включает функцию 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.

Ответы [ 2 ]

1 голос
/ 06 января 2012

Проблема в том, что ваш parseInt () в дате [1] использует начальный ноль.

return new Date(
    parseInt(date[2]), parseInt(date[0])-1, parseInt(date[1]),
    hm[0], parseInt(hm[1])
);

Когда вы передаете дату, например 01.09.2011, 09 обрабатывается как 0, а не как 9.

0 голосов
/ 07 января 2012

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...