当两个for循环嵌套的时候,如何运行的

后端给我了一个开始时间和一个结束时间,我需要判断是否在这个时间段内。首先开始时间和结束时间可能会是多个数组,时间段也会是多个数据。

数据结构如下
{"code":"0","data":{"nowDate":"2018-09-03 14:25:57","isCanUpdate":"0","list":[{"times":[{"startTime":"09:00","endTime":"21:30"}],"day":"2018-09-17"},{"times":[{"startTime":"09:00","endTime":"21:30"}],"day":"2018-09-18"},{"times":[{"startTime":"09:00","endTime":"21:30"}],"day":"2018-09-19"},{"times":[{"startTime":"09:00","endTime":"21:30"}],"day":"2018-09-20"},{"times":[{"startTime":"09:00","endTime":"21:30"}],"day":"2018-09-21"},{"times":[{"startTime":"09:00","endTime":"21:30"}],"day":"2018-09-22"},{"times":[{"startTime":"09:00","endTime":"21:30"}],"day":"2018-09-23"}]},"info":"成功"}

这是我处理过的数据

computed:{
              newTimesList(){
                  var day = this.childmessage.day
                  var newTimesList=this.initTimesList.map(function(item) {
                      return +new Date((day+" "+item).replace(/-/g,"/"));
                  })
                  return newTimesList
              },
              getTime(){
                  var timeLength = this.times.length;
                  var timesArray = [];
                  for (var i = 0; i < timeLength; i++) {
                      var startTime = this.day+" "+this.times[i].startTime;
                      var endTime = this.day+" "+this.times[i].endTime;
                      var startTimeStr = +new Date(startTime.replace(/-/g,"/"));
                      var endTimeStr = +new Date(endTime.replace(/-/g,"/"));
                      var timesList = {
                          startTimeStr:startTimeStr,
                          endTimeStr : endTimeStr
                      }
                      timesArray.push(timesList)
                      return timesArray
                  }
              },
              hasArrange(){
                  var activeArray = []
                  for (var i = 0; i < this.getTime.length; i++) {
                      for (var j = 0; j < this.newTimesList.length; j++) {
                          // 为什么全是false
                          // if (this.newTimesList[j]>this.getTime[i]["startTimeStr"]&&this.newTimesList[j]<this.getTime[i]["endTimeStr"]) {
                          //     var thisState = "true"
                          //     activeArray.push(thisState)
                          // }else{
                          //     var thisState = "false"
                          //     activeArray.push(thisState)
                          // }
                      }
                  }
                  return activeArray
              }

我想根据最后这个数据的下标判断有没有active这个类

阅读 3.8k
2 个回答

//扩展日期格式化(yyyy-MM-dd hh:mm:ss)
function format(date, format) {
var opt = {

  "M+" : date.getMonth()+1,
  "d+" : date.getDate(),
  "h+" : date.getHours(),
  "m+" : date.getMinutes(),
  "s+" : date.getSeconds()
};

if(new RegExp(/(y+)/).test(format)) {
  format = format.replace(RegExp.$1, (date.getFullYear()+"").substr(4 - RegExp.$1.length));
};

for(var key in opt) {
  if(new RegExp("("+ key +")").test(format)) {
    format = format.replace(RegExp.$1, RegExp.$1.length==1 ? opt[key] : ("00"+ opt[key]).substr((""+ opt[key]).length));
  }
};
return format;

}
//注:res.data为后台返回的数据,也就是你提供的数据。具体表达按自己的。
var data = res.data.data;
var nowDate = data.nowDate,

arrList = data.list;

function isInTime(nowDate, arrList) {

var isInTime = false,
    nowDay = format(new Date(nowDate), "yyyy-MM-dd"),
    nowTime = format(new Date(nowDate), "hh:mm:ss");
for(var i = 0; i < arrList.length; i++) {
    var day = arrList[i].day;
    if(nowDay == day) {
        var times = arrList[i].times;
        for(var j = 0; j < times.length; j++) {
            var startTime = times[j].startTime + ":00",
                endTime = times[j].endTime + ":00";
            if(nowTime >= startTime && nowTime <= endTime) {
                isInTime = true;
            }
        }
    }
}
return isInTime;

}

新手上路,请多包涵

如果看你的示例数据,那应该可以认为list返回的应该是近一周的工作时间。
那么你的需求应该是要判断nowDate是否在工作时间范围内。
不知道我这么理解对不对。
如果按照这么理解来做的话,应该可以按照如下代码处理:

var data={"code":"0","data":{"nowDate":"2018-09-03 14:25:57","isCanUpdate":"0","list":[{"times":[{"startTime":"09:00","endTime":"21:30"}],"day":"2018-09-17"},{"times":[{"startTime":"09:00","endTime":"21:30"}],"day":"2018-09-18"},{"times":[{"startTime":"09:00","endTime":"21:30"}],"day":"2018-09-19"},{"times":[{"startTime":"09:00","endTime":"21:30"}],"day":"2018-09-20"},{"times":[{"startTime":"09:00","endTime":"21:30"}],"day":"2018-09-21"},{"times":[{"startTime":"09:00","endTime":"21:30"}],"day":"2018-09-22"},{"times":[{"startTime":"09:00","endTime":"21:30"}],"day":"2018-09-23"}]},"info":"成功"};

function validate(data){

var nowDay=data.data.nowDate.substr(0,10);
var nowTime=parseInt(data.data.nowDate.substr(11).replace(/:/g,""));
for(var i=0;i<data.length;i++){
    var item=data.data.list[i];
    if(item.day==nowDay){
        for(var j =0;j< item.times.length;j++){
            var item2=item.times[i];
            if(nowTime>=parseInt(item2.startTime.replace(/:/g,""))*100&&nowTime<=parseInt(item2.endTime.replace(/:/g,""))*100){
                return true;
            }
        }
        //return false; //如果日期唯一可以直接在此处直接返回false
    }

}
return false;

}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题