2010-09-03 4 views
3

я получаю дату от сборщика даты и времени с этим:Подсчет количества дней между двумя датами с JavaScript

var endDate = new Date(); 
endDate = $("input[id$='DateTimeControl2Date']").val() 

Тогда я нашел другую дату и попытаться проверить, сколько дней есть между этими двумя датами, но я получить ошибку «Объект не поддерживает это свойство или метод». Что я делаю не так?

$('.StatusDateTable').each(function() { 
var statusDate = new Date(); 
statusDate = $(this).find(".dates").html(); 
var statusLight = $(this).find(".StatusLight").attr("src"); 
statusLight = statusLight.substring(33).slice(0,-9); 
if (statusLight == "Blue") { 
var oneDay = 1000*60*60*24; 

alert(endDate + statusDate); 
var date1_ms = endDate.getTime(); 
var date2_ms = statusDate.getTime(); 

var dayDifference = Math.abs(Math.round((date1_ms - date2_ms)/oneDay)); 

alert(dayDifference); 

} 
}); 

endDate имеет формат 02/09/2010 и statusDate 1/09/2010.

Заранее спасибо.

ответ

3

Дата() - это функция-конструктор, когда вы вызываете ее, вы назначаете результат этого конструктора переменной. Затем в строке после этого вы назначаете другой объект, результат метода jQuery val(), к той же переменной.

// The next line will overwrite the current value of `endDate` 
endDate = $("input[id$='DateTimeControl2Date']").val() 

Дата() принимает аргумент, который будет анализироваться в качестве даты. Это, как вы правильно установили новый объект даты для определенной даты/времени:

var endDate = new Date($("input[id$='DateTimeControl2Date']").val()); 

Это предполагает, что дата возвращается в формате, который Date() можно разобрать. То же самое относится к вашей переменной statusDate.


Просто видел формат двух дат в нижней части, которая не будет работать хорошо, когда быть разобран Дата(). Они не будут разбираться вообще в IE, а другие браузеры анализируют их, как если бы они были форматом mm/dd/yyyy. Это означает, что вам придется вручную разбить их и применить их к Date() конструктор:

var endDateSplit = $("input[id$='DateTimeControl2Date']").val().split("/"), 
    endDate = new Date(endDateSplit[2], endDateSplit[1]-1, endDateSplit[0]); 
Смежные вопросы