2016-04-01 4 views
0

У меня есть datepicker, который определен как date-picker класс. Я хочу проверить, действительна ли дата, я имею в виду, когда пользователь изменяет дату на клавиатуре, например, если наступает день более 31 или месяц более 12, он должен дать ошибку. Я написал эту функцию isValidDate, но она не работает нормально. Я где-то читал, что есть функция valid() для датпикеров.datepicker valid() функция проверки правильности даты

jsFiddle

$(function() { 
 
    $(".date-picker").datepicker({ 
 
    dateFormat: 'dd/mm/yy' 
 
    }); 
 

 
    $(".date-picker").each(function() { 
 
    $(this).add($(this).next()).wrapAll('<div class="imageInputWrapper"></div>'); 
 
    }); 
 

 
    $('input:button').click(function(e) { 
 
    $("#fDate").removeClass("red"); 
 

 
    var fromDate = $("#fDate").val(); 
 

 
    if (!isValidDate(fromDate)) { 
 
     $("#fDate").addClass("red"); 
 
    } 
 

 
    if (errors) e.preventDefault(); 
 
    }); 
 

 
    function isValidDate(date) { 
 
    var matches = /^(\d{2})[-\/](\d{2})[-\/](\d{4})$/.exec(date); 
 
    if (matches == null) return false; 
 
    var d = matches[2]; 
 
    var m = matches[2]; 
 
    var y = matches[3]; 
 

 
    if (y > 2100 || y < 1900) return false; // accept only recent & not too far years 
 

 
    var composedDate = new Date(y, m, d); 
 
    return composedDate.getDate() == d && composedDate.getMonth() == m && composedDate.getFullYear() == y; 
 
    } 
 
});
.imageInputWrapper { 
 
    width: 172px; 
 
    border: solid 1px white; 
 
    background-color: white; 
 
    display: flex; 
 
    align-items: center; 
 
    box-shadow: 0 2px 2px 0 #C2C2C2; 
 
} 
 
.red { 
 
    box-shadow: 0px 0px 2px 2px red; 
 
}
<script src="https://code.jquery.com/jquery-1.9.1.js"></script> 
 
<script src="https://code.jquery.com/ui/1.10.2/jquery-ui.js"></script> 
 
<form> 
 
    <input id="fDate" class="date-picker" type="text" name="fromDate" style="width: 130px; height: 41px; background-color: white; border: none; outline: none; margin-left:5px" /> 
 
    <img src="http://s9.postimg.org/nl2mcq2rv/calendar.png" id="fromDateImgId"> 
 
    <br/> 
 
    <input type="button" value="submit"> 
 
    </table> 
 
</form>

при вставке 44 в секции дня он не будет давать какие-либо ошибки в своем коде.

ответ

0

Вы можете использовать Date.parse() для своей проверки.

Пример

function isValidDate(str) { 
    return !isNaN(Date.parse(str)); 
} 
+0

проблема не проверить, если это число или нет, я хочу, чтобы это не идти дальше, чем предел, дни и месяцы – reshad

+0

'Date.parse() 'проверяет, что ваша строка даты действительна или нет, это не только проверка числа. 'Date.parse (« 44/04/2016 ») // -> NaN' ' Date.parse («01/04/2016») // -> 1451840400000' – hitamu

1

Ваш код работает отлично. Просто немного хитрости.

function isValidDate(date) { 
    var matches = /^(\d+)[-\/](\d+)[-\/](\d+)$/.exec(date); 
    if (matches == null) return false; 
    var d = matches[1]; 
    var m = matches[2]; 
    var y = matches[3]; 
    if (y > 2100 || y < 1900) return false; 
    var composedDate = new Date(y+'/'+m+'/'+d); 
    return composedDate.getDate() == d && composedDate.getMonth()+1 == m && composedDate.getFullYear() == y; 
    } 

Работа скрипку: https://jsfiddle.net/ppw1k3yu/1/