过滤日期数组

时间:2017-11-17 16:21:49

标签: javascript arrays

我知道其中有OUTER JOIN过滤数组以按照我想要的方式返回数据,并在我们传递我们想要在该数组中搜索的内容时使用大量搜索。

但是我在过滤这样的日期数组时遇到了问题:

.filter ()

我需要按过去的日期过滤它,我有开始日期和结束日期,例如步骤["08:00" "09:00" "10:10" "10:30" "10:50" "11:30" "11:50" "12:00"]; " 09:00 "它应该返回给我:

" 11:30 "

尝试这样做我在["10:10" "10:30" "10:50"]

中这样做了
typescript

在第1行,我得到了所有的时间,所以在第2.4行我过滤了这个数组,但它将一切都归还给我。

我该怎么做?

翻译我需要的内容:

我将有两个小时的字符串,如“12:00”和“15:00”我需要在我的数组中进行比较,因为我需要间隔之间的小时数,如上例所示。 / p>

当我说时间我正在谈论一个字符串时,所以我需要比较字符串,如果它更大或不比其他类型字符串低于“12:00”将不会出现在我的最终数组中,并且字符串更大比“15:00”也没有。

这是我能解释我需要的最佳方式,我没有看到任何其他解释方法。只需过滤一个数组

5 个答案:

答案 0 :(得分:4)

您只需使用修剪后的minmax值过滤值。

var array = ["08:00", "09:00", "10:10", "10:30", "10:50", "11:30", "11:50", "12:00"],
    min = "09:00",
    max = "11:30",
    result = array.filter(a => a > min && a < max);

console.log(result);

答案 1 :(得分:1)

如果您想在不使用过滤器或日期的情况下以更古老的方式进行此操作,则可以使用此方法。我个人会用Nina的答案。

var timestamps = ["08:00","09:00","10:10","10:30","10:50","11:30","11:50","12:00"];

function compareTimeString(time1, time2) {
    time1 = time1.split(":");
    time2 = time2.split(":");

    time1 = parseInt(time1[0]) * 60 + parseInt(time1[1]);
    time2 = parseInt(time2[0]) * 60 + parseInt(time2[1]);

    return time1 > time2 ? true : false;
}

function middleTime(startTime,endTime, timestamps) {
    var times = []

    for(i=0; i<timestamps.length; i++) {
        if(!compareTimeString(startTime,timestamps[i]) && 
            compareTimeString(endTime,timestamps[i])) {
            times.push(timestamps[i])
        }
    }

    return times;
}

答案 2 :(得分:0)

我建议使用下面的Moment并解析它到目前为止。

var str = '15:16:33';
var d = new moment(str, 'HH:mm:ss');

以下是有关时刻格式http://momentjs.com/docs/#/parsing/string-format/

的详细信息

答案 3 :(得分:0)

请在下面找到工作解决方案。享受:)

&#13;
&#13;
var dates = ["08:00", "09:00", "10:10", "10:30", "10:50", "11:30", "11:50", "12:00"]

function parseDate(dStr) {
  var now = new Date();
  now.setHours(dStr.split(':')[0]);
  now.setMinutes(dStr.split(':')[1]);
  now.setSeconds(0);
  return now;
}

function filterDates(start, end) {
  var startDate = parseDate(start);
  var endDate = parseDate(end);
  var parsedDates = dates.map(parseDate);
  return parsedDates.filter(function(dt) {
    return (dt > startDate && dt < endDate) 
  }).map(function(dt) {
    return dt.getHours() + ":" + dt.getMinutes()
  })
}

var result = filterDates("09:00", "11:30");
console.log(result);
&#13;
&#13;
&#13;

答案 4 :(得分:0)

您可以使用new Date()valueOf()的组合来比较时间戳,在我看来实际日期是无关紧要的:

function filterTimes(arr, min, max) {
   min = new Date('01-01-2017 '+min).valueOf();
   max = new Date('01-01-2017 '+max).valueOf();
   return arr.filter(function(a) {
      var d = new Date('01-01-2017 '+a).valueOf();
      if (d>min && d<max) return a
   })
}

用法filterTimes(array, '09:00', '11:30')

这是一个演示 - &gt;的 http://jsfiddle.net/u3g4u256/