Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Не получается сравнить даты в условии, выводит ошибку.

Константин Ефименко Гуру (3721), закрыт 4 года назад
У меня есть цикл с условием, который проверяет корректность даты в input(ах), находящихся в табличной части:

$('.d-not').each(function(idx, obj)
{
var dt = $(obj).attr("data-inp"),
valw = 0,
valf = 0,
DatExp = new RegExp(/^(0[1-9]|[12][0-9]|3[01])[\.](0[1-9]|1[012])[\.](19[7-9]\d|2\d\d\d)$/);
/*Если d-not первый input в строке таблицы*/
if (dt == 1)
{
valw = $(obj).val().trim();
/*Если длина одного из input(ов) равна нулю*/
if (valw.length === 0)
{
$(obj).attr('checked', false);
/*Иначе если один из input(ов) не соответствует регулярке*/
} else if (!valw.match(DatExp))
{
$(obj).attr('checked', false);
/*В любом ином случае, ставим флажок checked*/
} else
{
$(obj).attr('checked', true);
}
/*Иначе если d-not второй input в строке таблицы*/
} else if (dt == 2)
{
valf = $(obj).val().trim();
/*Если длина одного из input(ов) равна нулю*/
if (valf.length === 0)
{
$(obj).attr('checked', false);
/*Иначе если один из input(ов) не соответствует регулярке*/
} else if (!valf.match(DatExp))
{
$(obj).attr('checked', false);
/*Иначе если дата во втором поле, меньше или равна дате в первом поле*/
} else if (millisec(valw) >= millisec(valf))
{
$(obj).attr('checked', false);
/*В любом ином случае, ставим флажок checked*/
} else
{
$(obj).attr('checked', true);
}
}
});

Из-за проверки двух полей друг с другом:

else if (millisec(valw) >= millisec(valf))

возникает ошибка следующего вида:

Uncaught TypeError: date.split is not a function
at millisec

Сама функция выглядит так:
function millisec(date)
{
return new Date(date.split('.').reverse()).getTime();
}

Как проверить, что второе поле в строке таблицы, содержит дату не меньше и не равную дате, в первом поле той же строки таблицы?

P.S.: Если из условия убрать else if (millisec(valw) >= millisec(valf)), то оно выполняется идеально и без ошибок.
Лучший ответ
$eg@ru$ Мыслитель (7593) 4 года назад
Uncaught TypeError: date.split is not a function
at millisec

Мне кажется она вызывается потому что в функции ты возвращаешь объект Date, а split работает только со строкой.

Попробуй вернуть строку, и сравни.

P.S Совет, используй Moment.js для работы со временем, твой код уменьшится в 2 раза. Там есть все функции для манипуляции с датами (сложение, вычитание, получение даты из строки, сравнения и т. д)
Константин ЕфименкоГуру (3721) 4 года назад
"Попробуй вернуть строку, и сравни."

Так вообще не работает, ничего не происходит.

"Мне кажется она ...работает только со строкой."

Вот рабочий пример этой функции:

http://jsfiddle.net/n4mvyqba/
$eg@ru$ Мыслитель (7593) Если работаешь с датой, то бери не type=text, а type=date Когда text у тебя в твою функцию попадает NaN так как дату не может преобразовать и поэтому ошибка. С date всегда определится дата + маска не нужна в таком случае
Остальные ответы
Похожие вопросы