В настоящее время я использую средство выбора даты и времени начальной загрузки для обработки всех выбранных дат в приложении. Я использую проверку JQuery, и она работает с moment.js.
Входные данные используют настраиваемую привязку нокаута для средства выбора даты и времени.
<div class="col-xs-12 col-md-6">
<div class="form-group">
<label class="control-label col-md-4">Date and Time client received clinical*</label>
<div class="col-md-6" data-bind="visible: SubmittedToClientDateNA() === false">
<input id="SubmittedToClientDate" name="SubmittedToClientDate" autocomplete="off" type="text" class="ph-datetimepicker form-control" data-bind="dateAndTimePicker: SubmittedToClientDate" />
</div>
<div class="col-md-2">
<div class="checkbox">
<label>
<input id="SubmittedToClientDateNA" name="SubmittedToClientDateNA" type="checkbox" data-bind="click: SetSubmittedToClientDate, checked: SubmittedToClientDateNA">N/A
</label>
</div>
</div>
</div>
</div>
Moment.js сохраняет дату в формате, и этот js проверяет наличие значения.
$("#editAuthorizationInformationForm").validate({
rules: {
SubmittedToClientDate: { required: true }
}
});
Проблема, с которой я сталкиваюсь, заключается в том, что, когда пользователь вводит дату, например: «20/20/0008», проверка оценивает ее как действительную дату. Однако, когда значение возвращается на сервер и пытается сохранить его на сервере sql, оно выдает ошибку:
«Преобразование типа данных datetime2 в тип данных datetime привело к значению вне допустимого диапазона».
Есть ли способ проверить не только формат даты, но и саму дату на клиенте?
Спасибо за помощь!
ПОСТАНОВИЛИ:
Я решил это, добавив этот настраиваемый метод проверки:
$.validator.addMethod("ValidateDateFormat", function (date) {
var pattern = /(0\d{1}|1[0-2])\/([0-2]\d{1}|3[0-1])\/(19|20)(\d{2})/;
var m = date.match(pattern);
if (!m)
return false;
var d = new Date(date);
// Now let's ensure that the date is not out of index
if (d.getMonth() + 1 == parseInt(m[1], 10) && d.getDate() == parseInt(m[2], 10)) {
return true;
}
return false;
}, "Please enter a valid date");
И применив его к полю ввода:
$("#editAuthorizationInformationForm").validate({
rules: {
SubmittedToClientDate: { ValidateDateFormat: true, required: true }
}
});
.addMethod()
в документации. (Кроме того, при обращении за помощью по своему коду настоятельно рекомендуется опубликовать соответствующий код. Ознакомьтесь с часто задаваемыми вопросами.) - person Sparky   schedule 30.08.2018