Javascript 获取按日期过滤的JSON数据并从中生成新数组

Javascript 获取按日期过滤的JSON数据并从中生成新数组,javascript,arrays,json,for-loop,Javascript,Arrays,Json,For Loop,所以我对Javascript和JSON数据有这个问题。 当我从某个URL获取数据时,我会在一个带有字符串的JSON文件中获取数据。 现在我的问题是。其中一个字符串是我需要使用的日期,因此当日期小于当前日期时,它将从中形成一个新字符串,以便我可以正确地将数据显示为我正在设计的HTML 我的项目的想法是,它显示当天列出的事件,我只想显示即将到来的事件,而不是已经结束的事件 注:日期为ISO_8601格式。此外,我还不熟悉脚本编写。提前谢谢。如果将该字符串传递给新的DateyourString函数,它

所以我对Javascript和JSON数据有这个问题。 当我从某个URL获取数据时,我会在一个带有字符串的JSON文件中获取数据。 现在我的问题是。其中一个字符串是我需要使用的日期,因此当日期小于当前日期时,它将从中形成一个新字符串,以便我可以正确地将数据显示为我正在设计的HTML

我的项目的想法是,它显示当天列出的事件,我只想显示即将到来的事件,而不是已经结束的事件


注:日期为ISO_8601格式。此外,我还不熟悉脚本编写。提前谢谢。

如果将该字符串传递给新的DateyourString函数,它将返回一个JavaScript日期对象

例如:

const newDate = new Date('2008-09-15T15:53:00')
// Will return a date object with the value of:
// Mon Sep 15 2008 15:53:00 GMT-0700 (Pacific Daylight Time)

const currentDate = Date.now();
// Will return a date object with the current date.

console.log(newDate < currentDate);
// Will compare the two dates.

好吧,你没有提供足够的关于你的JSON结构和你已经取得的成就的信息,所以如果这还不够,请添加更多的细节,但我猜是这样的:

var eventsFromMyJSONstring = JSON.parse(theJSONstringFetchedFromCertainURL);
 var currentDate = new Date();
 eventsFromMyJSONstring.forEach(function(iEvent) {
    iEvent.newVarAsDate = new Date(iEvent.textDate);
    if (iEvent.newVarAsDate >= currentDate) {
        alert('hey, this object is from today or future');
    }
});
编辑:另外,也许你想使用过滤器来获取当前和未来的事件。。。比如:

var currentAndFutureEvents = eventsFromMyJSONstring.filter((iEvent) => new Date(iEvent.textDate) >= new Date());

ES6假设有…

我不知道您的数据是什么样子,但一般来说,您需要执行两个步骤:

将字符串转换为实际日期对象 过滤掉过去的日期 转换非常简单,只是新日期:

过滤掉过去的事件可以用。给它一个返回True或False的函数,它为每个数组项运行它。functiuon返回True的项将放入新数组:

[1, 3, 4, 6, 7].filter(number => number > 4); // -> [6, 7]
[1, 3, 4, 6, 7].filter(number => number <= 4); // -> [1, 3, 4]
如果您只需要按天进行比较,而不需要按小时甚至分钟进行比较,可以方便地将时间设置为午夜之后:

(new Date("2018-06-07")).setHours(0) // -> Thu Jun 07 2018 00:00:00 GMT+0100
因此,当把它们放在一起时:

常数数据={ 活动:[ {名称:事件1,日期:2018-06-12}, {名称:事件2,日期:2018-07-10}, {名称:事件3,日期:2018-07-12}, {名称:事件4,日期:2018-07-13}, {名称:事件5,日期:2018-08-01} ] } const today=new Date.sethours 0//午夜后 const todayAndFutureEvents=data.events.filterevent=>new Dateevent.date>=today;
console.logtodayAndFutureEvents 正如Simeon所说,我的观点是一样的,我想向他补充一点更多的信息

当你得到了日期,你需要做两件事

首先是检查它是否是有效日期 它的即将/未来日期。 您还没有添加讨论中的示例日期JSON,我假设您有一个类似于下面的JSON

[
    {name: "Something", date: "12-12-2018"},
    {name: "Something", date: "12-12-2017"},
    {name: "Something", date: "12-12-2019"},
    {name: "Something", date: "12-5-2018"},
    {name: "Something", date: "12-2-2018"},
    {name: "Something", date: "SOMETHING_INVALID"},
    {name: "Something", date: "12-12-2016"},
]
您可以使用这样的筛选器筛选有效日期和未来日期

let dates = [
    {name: "Something", date: "1-12-2018"},
    {name: "Something", date: "2-12-2017"},
    {name: "Something", date: "3-12-2019"},
    {name: "Something", date: "4-5-2018"},
    {name: "Something", date: "5-2-2018"},
    {name: "Something", date: "InvalidSomething"},
    {name: "Something", date: "7-12-2016"},
]

let filteredDates = dates.filter((item) => {
    let date = new Date(item.date);
    if(date !== 'Invalid Date' && Date.now() < date.getTime()){
        return item;
    }
});


console.log(filteredDates);
很少澄清: Date.now和Date.getTime都用于获取,我正在JavaScript过滤器内进行比较,如果Date对象未返回无效的日期字符串,并且如果**时间戳编号大于今天的时间戳,则它是未来的日期


当这两个条件匹配时,过滤器将返回Filteredates变量收集的整个对象。循环完成后,您将获得阵列以供进一步使用。干杯

你能举一个JSON数据的例子吗?如果我是对的:我需要这样的日期>var eventTime=new Date event.time如果我的JSON看起来像这个事件{time:Date in a string}意外按下多次@Simeon Smith sorry.ok。我一试用就会向你介绍最新情况。感谢您的帮助,然后您可以使用date.now创建当前日期,并将两者进行比较。
[
    {name: "Something", date: "12-12-2018"},
    {name: "Something", date: "12-12-2017"},
    {name: "Something", date: "12-12-2019"},
    {name: "Something", date: "12-5-2018"},
    {name: "Something", date: "12-2-2018"},
    {name: "Something", date: "SOMETHING_INVALID"},
    {name: "Something", date: "12-12-2016"},
]
let dates = [
    {name: "Something", date: "1-12-2018"},
    {name: "Something", date: "2-12-2017"},
    {name: "Something", date: "3-12-2019"},
    {name: "Something", date: "4-5-2018"},
    {name: "Something", date: "5-2-2018"},
    {name: "Something", date: "InvalidSomething"},
    {name: "Something", date: "7-12-2016"},
]

let filteredDates = dates.filter((item) => {
    let date = new Date(item.date);
    if(date !== 'Invalid Date' && Date.now() < date.getTime()){
        return item;
    }
});


console.log(filteredDates);