【问题标题】:get data from array of object in between date range in alasql从 alasql 中日期范围之间的对象数组获取数据
【发布时间】:2016-04-05 09:39:14
【问题描述】:

我正在使用 alasqlJavaScript 中的对象数组中获取给定日期范围内的数据。 我尝试了以下查询,但没有得到任何结果。我正在传递 开始日期结束日期,我只想要这些范围之间的 数据,如果还有其他方法可以做到这一点,那么它也会帮助我。请帮我做到这一点, 在此先感谢

startTime = Sun Mar 27 2016 00:00:00 GMT+0530 (India Standard Time)
endTime = Sat Apr 02 2016 00:00:00 GMT+0530 (India Standard Time)

data= [
{
  name:'Sam',
  reportDate:'3/25/2016 16:34:00 PM'
},{
  name:'Mac',
  reportDate:'3/27/2016 10:26:00 PM'
},{
  name:'Sandy',
  reportDate:'3/30/2016 19:14:00 AM'
},{
  name:'Smith',
  reportDate:'4/2/2016 14:54:00 PM'
},{
  name:'Warner',
  reportDate:'4/4/2016 17:04:00 AM'
},{
  name:'Finch', 
  reportDate:'3/28/2016 11:20:00 PM'
}
]

alasql("SELECT * from ?   WHERE DATE([[0].reportDate]) >=" + startDate + "AND DATE([[0].reportDate]) <= " + endDate + "", [data]);

【问题讨论】:

  • 你想用js从这个array读出值吗?这样您就可以得到 Mac、SandySmithdata 了吗?
  • @John 我希望将结果作为给定日期之间的对象数组。它应该排除不在日期范围内的数据
  • 只是为了确保:您有上述情况并想现在通过javascript从数组中获取数据范围?输出应该是Mac、Sandy和Smith的数据吧?
  • 是的,在日期范围内的任何数据都是正确的,在这种情况下是 Mac、Sandy、Finch 和 Smith
  • 是的,您是对的,任何来自 data array 的日期范围内的数据,在这种情况下是 Mac、Sandy、Finch 和 Smith

标签: javascript alasql


【解决方案1】:

试试这个:

var startDate = '2016-03-27';
var endDate = '2016-04-02';

var data = [
{
  name:'Sam',
  reportDate:'3/25/2016 16:34:00 PM'
},{
  name:'Mac',
  reportDate:'3/27/2016 10:26:00 PM'
},{
  name:'Sandy',
  reportDate:'3/30/2016 07:14:00 AM'
},{
  name:'Smith',
  reportDate:'4/2/2016 02:54:00 PM'
},{
  name:'Warner',
  reportDate:'4/4/2016 05:04:00 PM'
},{
  name:'Finch', 
  reportDate:'3/28/2016 11:20:00 PM'
}
];
var result = alasql("SELECT * from ?   WHERE DATE(reportDate) >= DATE('" + startDate +"') AND DATE(reportDate) <= DATE('" + endDate + "')", [data]);
document.body.innerHTML = JSON.stringify(result);
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/alasql/0.2.5/alasql.min.js"&gt;&lt;/script&gt;

【讨论】:

  • 谢谢。一件事是在您的结果中,它没有显示 smith 的结果,我的查询也发生了同样的情况。我无法弄清楚。这是我的查询 ** alasql("SELECT * from ? where reportDate >= '" + startTime + "' AND reportDate
  • Smith 没有进入结果集,因为数据有时间。查询正确!
  • @Anoop.P.A 你不正确问题是 OP 代码中的范围数据只是字符串,它们需要转换为 Date 对象才能比较它们。 OP 代码只转换数组中的日期,而不是他想要选择的范围。
【解决方案2】:

这是您可以通过 javascript 捕获数据的方法:
(仅当 startTimeendTimeStrings 时才有效。)

var month = ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"];

startTime = "Sun Mar 27 2016 00:00:00 GMT+0530 (India Standard Time)"
endTime = "Sat Apr 02 2016 00:00:00 GMT+0530 (India Standard Time)"

data = [{
  name: 'Sam',
  reportDate: '3/25/2016 16:34:00 PM'
}, {
  name: 'Mac',
  reportDate: '3/27/2016 10:26:00 PM'
}, {
  name: 'Sandy',
  reportDate: '3/30/2016 19:14:00 AM'
}, {
  name: 'Smith',
  reportDate: '4/2/2016 14:54:00 PM'
}, {
  name: 'Warner',
  reportDate: '4/4/2016 17:04:00 AM'
}, {
  name: 'Finch',
  reportDate: '3/28/2016 11:20:00 PM'
}]

// get the startTime f.e. 3/27/2016
var startT = /\s(\w+)\s(\d+)\s(\d+)/.exec(startTime); // get month out of startTime
var mS = month.indexOf(startT[1]) + 1; // get month & exchange month into digit
var dS = /0?(\d+)/.exec(startT[2])[1]; // get rid of possible "0" from day
var yS = startT[3];
var startTime_ = mS + "/" + dS + "/" + yS;

// get the endTime
var endT = /\s(\w+)\s(\d+)\s(\d+)/.exec(endTime); // get month out of startTime
var mE = month.indexOf(endT[1]) + 1; // get month & exchange month into digit
var dE = /0?(\d+)/.exec(endT[2])[1]; // get rid of possible "0" from day
var yE = endT[3];
var endTime_ = mE + "/" + dE + "/" + yE;

var startIndex = 0;
var endIndex = 0;

// get startIndex from data-array
data.forEach(function(e, i) {
  if (e.reportDate.indexOf(startTime_) >= 0) {
    startIndex = i; // this is where we start to get data from date-array
  }
})

// get endIndex from data-array
data.forEach(function(e, i) {
  if (e.reportDate.indexOf(endTime_) >= 0) {
    endIndex = i; // this is where we end to get data from date-array
  }
})

for (var i=startIndex; i<=endIndex; i++){
  document.write("name: "+data[i].name+"<br/>reportDate: "+data[i].reportDate+"<br/><br/>"); //data[i] is the data you want
}

【讨论】:

  • 感谢您的宝贵回答,但我不想循环数据,这就是我使用 alasql 的原因。
  • 哦,这就是为什么我问你是否想用 javascript 捕获数据。
  • 抱歉@John 没有澄清事情
  • 这不是使用alasql
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
  • 2020-07-25
  • 1970-01-01
  • 2021-07-10
  • 2019-02-23
相关资源
最近更新 更多