所选日期的短日期范围复选框

时间:2017-09-25 10:12:29

标签: javascript jquery arrays datetime

我们设置了一个复选框,标识为日期复选框。这些被称为登记入住日期。退房时间比登记入住日期大1。例如,如果入住日期是24/09/2017,那么结账时间是2017年9月25日。

因此,如果我们选择连续日期,我们会尝试缩短日期范围,例如,如果我们有四个日期24/09 / 2017,25 / 09 / 2017,26 / 09 / 2017,27 / 09/2017。如果我们选择24/09/2017,那么入住日期是24/09/2017,结账时间是2017年9月25日。但是如果我们选择24和25,26然后在数组中我们有三个值

checkindat:"24/09/2017",checkouts:"25/09/2017"

checkindat:"25/09/2017",checkouts:"26/09/2017"

checkindat:"26/09/2017",checkouts:"27/09/2017"

所以我们想要按顺序排列日期范围,然后它会显示入住日期为24/0/2017,结账日期为2017年9月27日。但是如果我们取消检查日期,那么它现在可以正常工作。

这是 jsfiddle

中代码的一部分



var alreadycheckin = [];

$("input[class='check htcheck']:checkbox").change(function() {
  var roomids = $(this).attr("roomid");
  checkindat = $(this).attr("name");
  var new_dates = moment(checkindat, "DD.MM.YYYY");
  var checkid = new_dates.format('DD-MM-YYYY');
  //if ($(this).is(":checked")) 
  {
    var html = '';
    arr = [];
    var roomcods = $(this).attr("value");
    var roomids = $(this).attr("roomid");
    checkindat = $(this).attr("name");
    var new_dates = moment(checkindat, "DD.MM.YYYY");

    var checkid = new_dates.format('DD-MM-YYYY');
    //console.log(checkid);
    var checkouts = new_dates.add(1, 'days').format('DD/MM/YYYY');
    var roomcodes = $(this).attr("value");
    var uniq = roomids + '_' + name + '_' + checkindat;
    uniq = uniq.split("/").join("").split("_").join("");
    var uniqs = '';
    //console.log($("#aa"+roomids));
    //	alreadycheckin.push({ roomids : roomids, checkindat : checkindat, checkouts: checkouts });
    var arrElement = {
      roomids: roomids,
      checkindat: checkindat,
      checkouts: checkouts
    };
    if ($(this).is(":checked")) {
      //alreadycheckin[uniq]={ roomids : roomids, checkindat : checkindat, checkouts: checkouts };
      alreadycheckin.push(arrElement);
    } else {
      var index1 = arr.indexOf(arrElement);
      alreadycheckin.splice(index1, 1);
    }

    var tmpAlreadycheckin = [];
    // tmpAlreadycheckin=alreadycheckin.slice(0);
    for (var i = 0; i < alreadycheckin.length; i++) {
      if (i > 0) {
        if (typeof alreadycheckin[i - 1] != "undefined" || alreadycheckin[i - 1] != null) {
          if (alreadycheckin[i].checkouts == alreadycheckin[i - 1].checkindat) {
            console.log("111");
            var arrElement1 = {
              roomids: roomids,
              checkindat: alreadycheckin[i].checkindat,
              checkouts: alreadycheckin[i - 1].checkouts
            };
            tmpAlreadycheckin.push(arrElement1);
            //tmpAlreadycheckin[i].checkouts =tmpAlreadycheckin[i+1].checkouts;
            //tmpAlreadycheckin.splice(i+1, 1);
          } else {
            console.log("2222");
            var arrElement2 = {
              roomids: roomids,
              checkindat: alreadycheckin[i].checkindat,
              checkouts: alreadycheckin[i].checkouts
            };
            tmpAlreadycheckin.push(arrElement2);
          }
        } else {
          console.log("3333");
          var arrElement2 = {
            roomids: roomids,
            checkindat: alreadycheckin[i].checkindat,
            checkouts: alreadycheckin[i].checkouts
          };
          tmpAlreadycheckin.push(arrElement2);
        }
      } else {
        console.log("3333");
        var arrElement2 = {
          roomids: roomids,
          checkindat: alreadycheckin[i].checkindat,
          checkouts: alreadycheckin[i].checkouts
        };
        tmpAlreadycheckin.push(arrElement2);
      }


    }
    console.log(tmpAlreadycheckin);
  }
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

<input roomid="15" id="15_24/09/2017" class="check htcheck" name="24/09/2017" value="1" type="checkbox">24/09/2017 <br/>
<input roomid="15" id="15_25/09/2017" class="check htcheck" name="25/09/2017" value="1" type="checkbox">25/09/2017 <br/>
<input roomid="15" id="15_26/09/2017" class="check htcheck" name="26/09/2017" value="1" type="checkbox">26/09/2017 <br/>
<input roomid="15" id="15_27/09/2017" class="check htcheck" name="27/09/2017" value="1" type="checkbox">27/09/2017 <br/>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:2)

如果您有这种格式的对象数组:checkindat:那么您可以先通过checkindate对数组进行排序,然后迭代遍历数组向后。您将从最后一个元素开始,查看其checkouts,然后将其与之前的元素checkouts进行比较。如果它们相同,请将之前的元素Settings更新为前面的元素,然后删除前面的元素。