Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jquery日期选择器:验证日期_Jquery_Jquery Ui Datepicker - Fatal编程技术网

jquery日期选择器:验证日期

jquery日期选择器:验证日期,jquery,jquery-ui-datepicker,Jquery,Jquery Ui Datepicker,我已经设置了一个jquery类: $(function() { $( ".datepickerIT" ).datepicker({ showOtherMonths: true, selectOtherMonths: true, showAnim: "clip", dateFormat: "dd/mm/yy", mi

我已经设置了一个jquery类:

$(function() {
            $( ".datepickerIT" ).datepicker({
                showOtherMonths: true,
                selectOtherMonths: true,
                showAnim: "clip",
                dateFormat: "dd/mm/yy",
                minDate: "01/01/1925",
                maxDate: "31/12/2050",
                changeMonth: true,
                changeYear: true,
                yearRange: "1925:2050",
                regional: "it"                      
            });
        });
我想添加一个日期检查控件,当用户输入的日期无效时发出警报

如何向类“.datepickerIT”添加这样的检查

onClose: function(dateText, inst) {
        try {
            $.datepicker.parseDate('dd/mm/yy', dateText);
        } catch (e) {
            alert(e);
        };

我必须在head部分包含什么插件

您可以通过以下方式验证日期(不需要插件):-

更新:@Razan Paul提到了正确的方法

$(document).ready(function(){

//  Check in date 
    $("#in" ).datepick({
        dateFormat: "mm/dd/yy",
        minDate:"0+1",
        maxDate: "2years",
        changeMonth:true, 
        changeYear:true,    
        onSelect:function(date_text,inst){
            var from = new Date(date_text);
            $( "#out" ).datepicker( "option", "minDate",from);
        }       


    });

//  Check out date  



});

注意:-这里是您的字段名,datepick是您的插件名。

Date。由于不同主机解析日期字符串的方式仍存在许多差异,因此不建议使用parse
。[1] [2]

我会用这个时刻来确认日期

moment(newDate, 'DD/MM/YYYY', true).isValid()
jsfiddle:

[1] [2] Date.parse()不支持dd/mm/yyyy,datepicker getDate会在任何解析错误中将日期设置为当前日期,因此此定制检查使用新日期(yyyy,mm,dd)验证转换后的日期部分是否一致:

$(function() {
    $(".datepickerIT")
        .datepicker({
            showOtherMonths: true,
            selectOtherMonths: true,
            showAnim: "clip",
            dateFormat: "dd/mm/yy",
            minDate: "01/01/1925",
            maxDate: "31/12/2050",
            changeMonth: true,
            changeYear: true,
            yearRange: "1925:2050",
            regional: "it"                      
        })
        .on('blur', function() { // This check is for dd/mm/yyyy format but can be easily adapted to any other
            if(this.value.match(/\d{1,2}[^\d]\d{1,2}[^\d]\d{4,4}/gi) == null)
                alert('Invalid date format');
            else {
                var t = this.value.split(/[^\d]/);
                var dd = parseInt(t[0], 10);
                var m0 = parseInt(t[1], 10) - 1; // Month in JavaScript Date object is 0-based
                var yyyy = parseInt(t[2], 10);
                var d = new Date(yyyy, m0, dd); // new Date(2017, 13, 32) is still valid
                if(d.getDate() != dd || d.getMonth() != m0 || d.getFullYear() != yyyy)
                    alert('Invalid date value');
            }
        });
});

我试过你的提琴和
Date.parse
来解析月份中的第31天,该天的返回值不超过NaN。有解决方法吗?此方法接受无效日期。例如,2016年40月40日的结果是1557439200000。我是否必须包含
moment.js
库才能使用它?是的,isValid函数是moment对象的一部分。这应该是公认的答案。评论中的完整性和细节确实有助于理解正在发生的事情。正因为如此,我对正则表达式有了更多的了解。谢谢你的回答,Y.B.,这是我用过的。我有一个不想要的行为,点击选取器会使数据模糊并触发验证。发生这种情况是有道理的,但会降低模糊验证的灵活性。我使用.blur()解决了我的问题,它使用了datepicker的onClose事件/属性来触发验证。
$(function() {
    $(".datepickerIT")
        .datepicker({
            showOtherMonths: true,
            selectOtherMonths: true,
            showAnim: "clip",
            dateFormat: "dd/mm/yy",
            minDate: "01/01/1925",
            maxDate: "31/12/2050",
            changeMonth: true,
            changeYear: true,
            yearRange: "1925:2050",
            regional: "it"                      
        })
        .on('blur', function() { // This check is for dd/mm/yyyy format but can be easily adapted to any other
            if(this.value.match(/\d{1,2}[^\d]\d{1,2}[^\d]\d{4,4}/gi) == null)
                alert('Invalid date format');
            else {
                var t = this.value.split(/[^\d]/);
                var dd = parseInt(t[0], 10);
                var m0 = parseInt(t[1], 10) - 1; // Month in JavaScript Date object is 0-based
                var yyyy = parseInt(t[2], 10);
                var d = new Date(yyyy, m0, dd); // new Date(2017, 13, 32) is still valid
                if(d.getDate() != dd || d.getMonth() != m0 || d.getFullYear() != yyyy)
                    alert('Invalid date value');
            }
        });
});