jquery datepicker: ¿Validar el valor de entrada actual?

He estado usando el complemento Datepicker de jQuery UI. Quiero poder validar si el cuadro de texto de entrada al que está adjunto tiene actualmente una fecha válida o no.

Por ejemplo:

Si alguien decide escribir 02/30/2010 me gustaría poder preguntar de alguna manera al complemento si el valor de entrada actual es una fecha válida (lo que no es en este caso).

¿Alguien sabe cómo se puede hacer esto?

Puede resolver su problema haciendo que el cuadro de texto sea de solo lectura y establezca el formato de fecha que desee. Por lo tanto, el usuario no puede escribir nada en el cuadro de texto, solo el usuario selecciona el formato de fecha correcto (que usted configuró) del selector de fecha. Por favor vea el ejemplo de abajo.

 

Date:

Es muy fácil

 let value = $(this).val(); let format = $(this).datepicker('option', 'dateFormat'); let valueIsValid = false; try { $.datepicker.parseDate(format, value); valueIsValid = true; } catch (e) {} 

Aunque esta pregunta tiene casi dos años, recientemente he tratado con una solución similar y descubrí que la biblioteca Globalize es el mejor enfoque. Por ejemplo, suponga que tiene un cuadro de texto que tiene un selector de fecha jQueryUI adjunto. Cuando se pierde el foco en el cuadro de texto, puede usar Globalizar para validar la fecha ingresada. En este caso, el cuadro de texto está en blanco si la fecha no es válida o se coloca en un formato estándar si la fecha es válida:

 $('#myDateTextBox').blur(function () { var parsedDate = Globalize.parseDate($(this).val()); if (parsedDate == null) { $(this).val(''); } else { $(this).val(Globalize.format(parsedDate, 'd')); } 

La biblioteca Globalize permite especificar una cultura (utilizando idealmente el idioma de la solicitud) para que el usuario pueda ingresar una fecha en el formato de su cultura.

Observe las opciones dateFormat y constrainInput del selector de fecha. http://jqueryui.com/demos/datepicker/#option-dateFormat

Agregué un método “truedate” al validador. Me encantaría dar crédito al código de quien sea, pero no recuerdo dónde lo encontré.

 $.validator.addMethod("truedate", function (value) { function GetFullYear(year) { var twoDigitCutoffYear = 10 % 100; var cutoffYearCentury = 10 - twoDigitCutoffYear; return ((year > twoDigitCutoffYear) ? (cutoffYearCentury - 100 + year) : (cutoffYearCentury + year)); } if (value == null || value == '') return true; var yearFirstExp = new RegExp("^\\s*((\\d{4})|(\\d{2}))([-/]|\\. ?)(\\d{1,2})\\4(\\d{1,2})\\.?\\s*$"); try { m = value.match(yearFirstExp); var day, month, year; if (m != null && (m[2].length == 4)) { day = m[6]; month = m[5]; year = (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3])); } else { var yearLastExp = new RegExp("^\\s*(\\d{1,2})([-/]|\\. ?)(\\d{1,2})(?:\\s|\\2)((\\d{4})|(\\d{2}))(?:\\s\u0433\\.)?\\s*$"); m = value.match(yearLastExp); if (m == null) { return null; } day = m[3]; month = m[1]; year = (m[5].length == 4) ? m[5] : GetFullYear(parseInt(m[6])); } month -= 1; var date = new Date(year, month, day); if (year < 100) { date.setFullYear(year); } return (typeof (date) == "object" && year == date.getFullYear() && month == date.getMonth() && day == date.getDate()) ? date.valueOf() : null; } catch (err) { return null; } }, "Please enter an actual date."); $('form').validate({ rules: { insurance_GL: "truedate", }, messages: { insurance_GL: "Insurance GL date is not valid", } }); 

EDITAR Debo haberlo obtenido de aquí: Selector de fecha de Jquery: validar fecha mm / dd / aaaa

Es posible usar JS Date para validar su Cadena de fecha.

 var myDate = new Date(userInputString); if (myDate == "Invalid Date"){ // user input is invalid } 

También tenga en cuenta que (myDate === "Invalid Date") devuelve false incluso para fechas no válidas. Usar == funciona bien, sin embargo, la forma correcta de verificar es (isNaN( d.getTime()))