当前位置: 首页 > 知识库问答 >
问题:

如何为多个输入加载具有不同日期范围的datetimepicker

曾新立
2023-03-14

我希望每个框中都有新的日期范围,但它只返回最后一个文本框的日期范围。我也使文本框id的动态,但我仍然面临着这个问题。我有每个文本框的开始日期和结束日期,我用PHP计算了开始日期和结束日期的日期范围,并禁用了用户在开始日期和日期中选择的所有日期,所有这些日期都正常工作,但它返回了datepicker中禁用的最后一个文本框日期。

这是截图-

示例图像

用于datepicker的Javascript函数,用于取消每个框的日期-

$(function () {
  var count = $('#count').val();
  var uid = $('#usersId').val();
  var pid = $('#projectsId').val();
  for (i = 1; i <= count; i++) {
    $('#projectAssStartDate' + i).datepicker({
      beforeShowDay: function (date) {
        var dateString = jQuery.datepicker.formatDate('yy-mm-dd', date);
        minDate: 0;
        alert(dateRange);
        console.log(dateString);
        return [dateRange.indexOf(dateString) == -1];
      }
    });

    var date_range = $('#calendarDateString' + i).val();

    var newdate = date_range.replace(/,(?=[^,]*$)/, '');
    var res = '"' + newdate + '"';
    var startDate, endDate, dateRange = res;

    $('#projectAssEndDate' + i).datepicker({
      beforeShowDay: function (date) {
        var dateString = jQuery.datepicker.formatDate('yy-mm-dd', date);
        console.log(dateString);
        return [dateRange.indexOf(dateString) == -1];
      }
    });
  }
});

HTML用于创建框id的动态并从中获取值。

<input type="text" class='datepicker' size='11' title='D-MMM-YYYY' name="projectAssStartDate[]" id="projectAssStartDate<?php echo $id;?>"  value="" style="padding: 7px 8px 7px 8px;font-weight: bold;" />

<input type="text" class='datepicker' size='11' title='D-MMM-YYYY' name="projectAssEndDate[]" id="projectAssEndDate<?php echo $id;?>" value="" style="padding: 7px 8px 7px 8px;font-weight: bold;" />

<input id="calendarDateString<?php echo $id;?>" name="calendarDateString<?php echo $id;?>" title='D-MMM-YYYY' type="text" value="<?php echo $string;?>" />

<input id="projectsId" name="projectsId[]"  type="hidden" value="<?php echo $rows['PROJECT_ID'];?>" />

<input id="usersId" name="usersId[]"  type="hidden" value="<?php echo $rows['UM_ID'];?>" />

共有1个答案

乐正心思
2023-03-14

请检查答案并回答这是否是您需要的方式。如果没有,请说明您希望对下面的代码结果进行什么更改。我很抱歉,我操纵了你的一些价值观来缓解我的结果。如果这是您所期望的,将给出详细解释。

$(function () {
  var count = 2;//$('#count').val();
  var uid = $('#usersId').val();
  var pid = $('#projectsId').val();

// populate the array


var startDatearray= ["index 0","2016-06-15","2016-06-20"]; // you dont need to create this array .. just fetch these dates from your database as u need
var endDatearray=["index 0","2016-06-21","2016-06-25"];
var i;
  for (i = 1; i <= count; i++) {

    $('#projectAssStartDate' + i).datepicker({
      beforeShowDay: function (date) {
        var  i=parseInt($(this).attr('id').replace(/[^0-9\.]/g, ''), 10); // as i wont get here so i took it from the current id
        var startDate = startDatearray[i], // some start date
        endDate  = endDatearray[i];  // some end date
        var dateRange = [];
        for (var d = new Date(startDate); d <= new Date(endDate); d.setDate(d.getDate() + 1)) {
                dateRange.push($.datepicker.formatDate('yy-mm-dd', d));

        }
        var dateString = jQuery.datepicker.formatDate('yy-mm-dd', date);
        minDate: 0;
        //alert(date);
        console.log(dateString +"__"+[dateRange.indexOf(dateString) == -1] +"__"+dateRange);
        return [dateRange.indexOf(dateString) != -1]; // if u need the opposit then you can use { == -1} 
      }
    });

    var date_range = $('#calendarDateString' + i).val();

    var newdate = date_range.replace(/,(?=[^,]*$)/, '');
    var res = '"' + newdate + '"';
    var startDate, endDate, dateRange = res;

    $('#projectAssEndDate' + i).datepicker({
      beforeShowDay: function (date) {
        var dateString = jQuery.datepicker.formatDate('yy-mm-dd', date);
        console.log(dateString);
        var  i=parseInt($(this).attr('id').replace(/[^0-9\.]/g, ''), 10); // as i wont get here so i took it from the current id
        var startDate = startDatearray[i], // some start date
        endDate  = endDatearray[i];  // some end date
        var dateRange = [];
        for (var d = new Date(startDate); d <= new Date(endDate); d.setDate(d.getDate() + 1)) {
                dateRange.push($.datepicker.formatDate('yy-mm-dd', d));

        }
        var dateString = jQuery.datepicker.formatDate('yy-mm-dd', date);
        minDate: 0;
        //alert(date);
        console.log(dateString +"__"+[dateRange.indexOf(dateString) == -1] +"__"+dateRange);
        return [dateRange.indexOf(dateString) != -1]; // if u need the opposit then you can use { == -1}
      }
    });
  }
});
 类似资料:
  • 问题内容: 如果我有一个像这样的桌子 我如何才能像这样退货… 我正在考虑做的一件事是让另一个具有全部日期的表,然后使用和将仅具有日期的表加入到上述表中,但这似乎有点笨拙,因为除了重复的日期外,别无其他维护该表的必要性。 在某些情况下,我没有数据范围,而只有一个日期,基本上看起来像我的第一个示例,但没有。该由下一行的“作为”日暗示(即结束日期应该是下一行的-1)。为此,我有一个“解决方案”,它使用r

  • > 每个对象表示一个重复发生的事件。该事件可以在多个日期发生。因此,请考虑以下内容: 我有一个日历在客户端,用户可以选择一个日期范围。 > 对所选日期范围的每个条目进行调用,并在客户端处理聚合。问题是会有大量的读取,因为我们会多次读取重叠的日期范围内的同一个列表对象。 尝试使用类似ElasticSearch/Algolia的服务来完成此操作 任何建议都会很有帮助!

  • 我在一个表(即TAB1)中有多个日期范围,如下所示。 对上面的SQL查询有什么建议吗?

  • 问题内容: 以下range_query返回预期结果: 但是,与多个范围查询一起,则不会返回任何内容: 在多个字段上使用多个range_queries的正确方法是什么? 编辑: 啊,好的,所以这是我使用range_filter而不是range_query的地方?这听起来很有希望,所以我仅使用一个范围过滤器重新编写了查询。如果我在其他地方弄乱了查询,请在此处发布所有内容。我正在执行GET,并且源密钥中

  • 我有两个约会:第一次和最后一次。考虑到这个月,我需要能够快速获得所有的过渡日。问题是日期中的每个数字都是由一个变量引起的。原因是我使用了带范围的日期选择器,但所有值都是单独给出的(比如startDay、startMonth、startYear和endDay、endMonth、endYear)。所以,我需要得到这些日期之间的所有日期。它一定是这样的: 看看这个:2018年3月1日。 解决方案: 谢谢

  • 问题内容: 我想在JCalendar上禁用多个日期范围。我正在按照以下步骤操作,但是我需要知道如何添加多个日期评估器。请帮助我,谢谢。 更新:我不知道为什么我不能禁用JCalendar上的日期。我将把代码留在这里,以便大家检查。 这是我的RangeEvaluator类,从该类修改而来。 这是我使用RangeEvaluator类的方式: 我想念什么吗?请帮助我,谢谢。 问题答案: 根据您的更新,这里