Как проверить bootstrap-datetimepicker с помощью jQuery Validate

В настоящее время я использую средство выбора даты и времени начальной загрузки для обработки всех выбранных дат в приложении. Я использую проверку 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 }
            }
        });

person lmorreale    schedule 29.08.2018    source источник
comment
Напишите собственное правило для проверки самой даты. См. Метод .addMethod() в документации. (Кроме того, при обращении за помощью по своему коду настоятельно рекомендуется опубликовать соответствующий код. Ознакомьтесь с часто задаваемыми вопросами.)   -  person Sparky    schedule 30.08.2018
comment
Привет, Спарки, спасибо за ответ. Я добавил часть кода, чтобы помочь другим лучше понять мою проблему. Вы предлагаете, чтобы я использовал validator.addMethod в datetime с каким-то регулярным выражением для проверки каждой части даты? т.е. убедитесь, что значение месяца находится между 1-12 и значением дня 1-31 и т. д.?   -  person lmorreale    schedule 30.08.2018
comment
Я прочитал повторяющиеся сообщения, на которые вы указали ссылку, и, к сожалению, они не отвечают на мой вопрос.   -  person lmorreale    schedule 30.08.2018
comment
Я предлагаю вам добавить в это поле еще одно правило на стороне клиента, чтобы убедиться, что данные на стороне клиента соответствуют вашим потребностям. Однако, поскольку вы пытаетесь предотвратить ошибку на стороне сервера, лучше всего также иметь некоторый код проверки на стороне сервера, чтобы в первую очередь предотвратить отправку неверных данных в вашу базу данных.   -  person Sparky    schedule 30.08.2018
comment
@Sparky Спасибо за вашу помощь. Я опубликовал свое решение в вопросе выше.   -  person lmorreale    schedule 30.08.2018