获取阵列中的期货日期

时间:2018-04-06 23:16:03

标签: javascript arrays date

我在数组中查找未来日期的总数,有些键没有值。

我已经设法将新数组中的日期分开,只获得未来的数据:

let dates = resp.consultas.map(consultas => consultas.date_a);

结果:

[
  "2018-04-02T15:15",
  "2018-04-07T14:20",
  "2018-04-28T11:50",
  null,
  null,
  null,
  null,
  "2018-05-30T17:45",
  "2018-04-07T16:20"
]

如何计算未来的日期?

5 个答案:

答案 0 :(得分:1)

// Get current time
const now = Date.now();
const futureDates = dates.filter(date => {
  // Filter out dates in the past or falsey values
  return date && (new Date(date)).getTime() > now;
});

// Do something with the result
console.log(futureDates.length);

答案 1 :(得分:0)

如果不考虑时区,无效日期字符串等情况,请使用下面的Array.filter



const test = [
  "2018-04-02T15:15",
  "2018-04-07T14:20",
  "2018-04-28T11:50",
  null,
  null,
  null,
  null,
  "2018-05-30T17:45",
  "2018-04-07T16:20"
]
const currentWhenCalc = new Date()
result = test.filter(function(item){
  return item && new Date(item) > currentWhenCalc
})
console.log('data', result, 'count', result.length)




答案 2 :(得分:0)

您可以使用moment.isAfterArray.filter清除旧日期和null值。

const dates = [
  "2018-04-02T15:15",
  "2018-04-07T14:20",
  "2018-04-28T11:50",
  null,
  null,
  null,
  null,
  "2018-05-30T17:45",
  "2018-04-07T16:20"
]

const futureDates = dates.filter(date => moment(date).isAfter())

console.log(futureDates);
<script src="https://momentjs.com/downloads/moment.js"></script>

  

如何计算未来的日期?

使用过滤器后,只剩下有效日期,所以:

console.log(futureDates.length);

答案 3 :(得分:0)

实际上你甚至不需要将它们嵌套。如果要过滤数组,则应使用Array.filter。 IT具有(value, index, originalArray) => Boolean的足迹,具有真实含义,并且具有错误的含义:

let currentTime = new Date();
let futureconsultas = resp.consultas.filter( consultas =>
  new Date(consultas.date_a) - currentTime > 0
);

现在你应该有一个所有未来日期的数组   - 作为注释:new Date() - new Date('INVALID')返回NaN,与数字或掩码相比,其评估为false,因此您不必担心错误的日期。 new Date(null)参数导致纪元0,现在不是,而new Date(undefined)导致错误的日期
  - 第二个注意事项:您不应在每个循环中使用new Date()调用。如果阵列足够大,这可能会降低执行速度。获取引用日期并使用Closure(范围)来引用它。

这是有效的,因为当你计算两个Date时,它们的结果实际上是一个基于日期的纪元值的数字。

简化示例:

const filtration = object => object.v > 3
console.log([{v:1},{v:2},{v:3},{v:4},{v:5}].filter(filtration)) // [{v:4},{v:5}]

之后,您只需检查数组上的.length属性

即可
[1,2,3,4,5].length == 5 // true

Array在JS中的原型上有几个有用的函数,包括forEach(mutating),filter,map,find,findIndex和more

答案 4 :(得分:0)

日期是示例日期中的数组(作为字符串)。 Array有一个filter方法,它为日期数组中的每个日期执行提供的函数。然后检查该日期是否实际具有值(非空),创建表示今天日期(dt)的新日期和数组中字符串的日期。 Date.getTime()是一种比较时间标记&#39;并且是比较两个日期对象的好方法。如果您的日期更大(将来),那么今天,该日期将被添加到新数组中,该数组根据此条件(futureDates)过滤函数构建,该条件最终将仅包含将来的元素。

var futureDates = dates.filter(function(date) {
   if(date) {
     var dt = new Date();
     var df = new Date(date);
     if(df.getTime() > dt.getTime())
       return df;
     }
});