我在数组中查找未来日期的总数,有些键没有值。
我已经设法将新数组中的日期分开,只获得未来的数据:
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"
]
如何计算未来的日期?
答案 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.isAfter和Array.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;
}
});