首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何防止选择中间有禁用日期的日期范围?

如何防止选择中间有禁用日期的日期范围?
EN

Stack Overflow用户
提问于 2014-05-19 12:50:24
回答 3查看 4.2K关注 0票数 3

我有两个Jquery日期选择器,可以在其中选择一个日期范围。

我已经实现了某些限制,比如,textbox2的日期应该总是大于textbox1。此外,我还禁用了某些日期。

我需要的是,如果用户选择从日期,然后选择日期,如果之间存在禁用日期,那么用户应该无法选择该范围。

例如:

我已禁用日期:"31-5-2014", "1-6-2014", "2-6-2014"

如果用户选择date1作为29-5-2014,并尝试选择4-6-2014作为第二个日期,那么他就不应该能够做到这一点,因为禁用日期是介于之间的。date2的最大值必须是30-5-2014

添加小提琴

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-22 05:17:40

我向您的代码中添加了一个函数"validateDateRange“,以说明完成此任务所需的逻辑。请注意,我添加的函数的目的是在发生您所描述的情况时简单地弹出一个警报。从现在起你应该可以做任何你喜欢做的事。如果你有更多的问题或正在寻找其他的东西,请告诉我们。

这是我的最新消息

代码语言:javascript
运行
复制
function validateDateRange() {

    var txtStartDate = $("#start_date");
    var txtEndDate = $("#end_date");
    var startDate;
    var endDate;
    var tempDate;

    if (txtStartDate.val() == "") 
        return false;

    if (txtEndDate.val() == "") 
        return false;

    startDate = new Date(txtStartDate.val());
    endDate = new Date(txtEndDate.val());

    for (i = 0; i < unavailableDates.length; i++) {
        var temp = unavailableDates[i].split("-");

        tempDate = new Date(temp[2], temp[1]-1, temp[0]);

        if (startDate < tempDate && endDate > tempDate) {
            alert("Invalid Date Range");
            return false;
        }
    }
}
票数 7
EN

Stack Overflow用户

发布于 2014-05-23 17:06:32

如果jQuery用户界面数据报警器不支持这样的功能,手动方式就是未来的路。

您可以在onSelect 日期选择器中使用日期选择器的选项来实现此功能。

代码语言:javascript
运行
复制
   $('#start_date').datepicker(
   {
       beforeShow: customRangeStart,
       beforeShowDay: unavailable,
       minDate: 0,
       dateFormat: "yy-mm-dd",
       changeYear: true,
       onSelect: function() {
           //Do validation functionality here
           triggerOnStartSelect();
        }
   });

并将新的maxDate of end_date日期选择器设置为:

代码语言:javascript
运行
复制
//Trigger upon change event of either start or end date
function triggerOnStartSelect(){
    var startDate = new Date($("#start_date").datepicker("getDate"));
    var endDate = new Date($("#end_date").datepicker("getDate"));    
    //if required you could reset all of the default setting here //
    //And can also validate the date objects 

    //Holds to be set maxdate of end_date datepicker
    var tempEndDate= null ;
    //unavailableDateObjects : Array of date objects listed as disabled
      $.each(unavailableDateObjects, function(i, disabledRangeDate) {
       if (startDate < disabledRangeDate) {
           tempEndDate=new Date(disabledRangeDate);
           //subtracts one day from the nearest disabled range date 
           tempEndDate.setDate(tempEndDate.getDate() - 1);
           return false;
        }
    }); 
    //Sets maxDate to the closest disabled date range or null . if null denotes no maxdate.
    $( "#end_date" ).datepicker( "option", "maxDate", tempEndDate);
}

并且可以从字符串数组列表中获得日期对象数组。

代码语言:javascript
运行
复制
var unavailableDates = ["31-5-2014", "1-6-2014", "2-6-2014", "3-6-2014"];

as (或者您可以直接定义类似于unavailableDates数组的日期数组对象):

代码语言:javascript
运行
复制
//Convert String Date List to Date object List
function convertDisabledFieldToDateObject(diabledList) {
    var dateList = [];
    $.each(diabledList, function (i, singleDate) {
       var parsedDate = $.datepicker.parseDate("dd-mm-yy",singleDate);
        dateList.push(parsedDate);
    });
    //Sort date if the diabled date sets are in jumbled order
    dateList.sort(function(date1, date2){
    return date1 - date2;
      });
    return dateList;
}

它将在日期字符串数组初始化后调用。

看看这个演示Fiddle

在解决这个问题的过程中,我发现一个有趣的问题可以用来解决这个问题(可能是):

JQuery数据报警器查找下一个禁用日期

票数 0
EN

Stack Overflow用户

发布于 2017-12-06 06:34:00

代码语言:javascript
运行
复制
    var StartDate = $("#start_date").val();
    var EndDates = $("#end_date").val();
    var selectedDate = $("#selected_date").val();

    //-- Start Date Convert in YMD 
    var Sdate = StartDate.split("-");
    var Syear= Sdate[2];
    var Smonth= Sdate[1];
    var Sday= Sdate[0];
    var SYMDDate = Syear + '-' + Smonth + '-' + Sday;
    var newdate= new Date(SYMDDate);
    var StartDateStrToTime=newdate.getTime();

    //-- End Date Convert in YMD
    var Edate = EndDates.split("-");
    var Eyear= Edate[2];
    var Emonth= Edate[1];
    var Eday= Edate[0];
    var EYMDDate = Eyear + '-' + Emonth + '-' + Eday;
    var newdates= new Date(EYMDDate);
    var EndDateStrToTime=newdates.getTime();

    //-- Selected Date Convert in YMD
    var Cdate = selectedDate.split("-");
    var Cyear= Cdate[2];
    var Cmonth= Cdate[1];
    var Cday= Cdate[0];
    var CYMDDate = Cyear + '-' + Cmonth + '-' + Cday;
    var newdateses= new Date(CYMDDate);
    var SelectedDateStrToTime=newdateses.getTime();

    if((SelectedDateStrToTime>=StartDateStrToTime) && (SelectedDateStrToTime<=EndDateStrToTime))
    {}
    else
    {
        alert("Please Select date between "+StartDate+" to " +EndDates+".");
        $("#selected_date").val(EndDates);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23738226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档