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