算法:从数组(javascript/angular)中按当前日期获取上一个和下一个事件
algorithm: get the last and next events by current date from array (javascript / angular)
有人能帮我做一个算法吗?
我有一个事件列表,我想在当前日期之前获得下一个事件和以前的事件。
示例
我从sql数据库中获取所有事件,如下所示:
events = [
{eventId:1, eventDate: "Wen Apr 01 2015 18:41:00 GMT+0300", eventPlace":'Dortmund, DE'},
{eventId:2, eventDate: "Sun Apr 05 2015 23:41:00 GMT+0300", eventPlace":'Budapest, HU'},
{eventId:3, eventDate: "Fri Apr 03 2015 13:41:00 GMT+0300" eventPlace":'Madrid, ES'},
{eventId:4, eventDate: "Mon Jun 01 2015 22:00:00 GMT+0300" eventPlace":'London, EN'},
.......
{eventId:100, eventDate: "Mon Aug 31 2015 22:00:00 GMT+0300"}
]
如果当前日期是2015年4月5日星期日15:00:00,我想获得
resultNextEv= {eventId:2, eventDate: "Sun Apr 05 2015 23:41:00 GMT+0300", eventPlace":'Budapest, HU'}
resultLastEv= {eventId:3, eventDate: "Fri Apr 03 2015 13:41:00 GMT+0300" eventPlace":'Madrid, ES'}
如何获得这个结果是最好的方法。(我使用的是javascript/angular)有什么想法吗?
感谢
首先,按日期对事件进行排序:
var sorted= events.sort(function(a,b) {
return new Date(a.eventDate) - new Date(b.eventDate);
});
然后,遍历已排序的事件。如果某个日期小于目标日期,请将其设置为上一个事件。如果它大于目标日期,则将其设置为下一个事件,并停止迭代:
function getDates() {
var sorted= events.sort(function(a,b) {
return new Date(a.eventDate) - new Date(b.eventDate);
});
var date= new Date(document.getElementById('date').value),
i,sdate;
for(i = 0 ; i < sorted.length ; i++) {
sdate= new Date(sorted[i].eventDate);
if(sdate > date) break;
}
//do something with sorted[i-1] and sorted[i]
} //getDates
要获取最后N事件,请使用sorted[i-1]
、sorted[i-2]
。。。sorted[i-N]
。
要获取下一个N事件,请使用sorted[i]
、sorted[i+1]
。。。sorted[i+N-1]
。
Fiddle
var events = [
{eventId:1, eventDate: "Wen Apr 01 2015 18:41:00 GMT+0300", eventPlace:"Dortmund, DE"},
{eventId:2, eventDate: "Sun Apr 05 2015 23:41:00 GMT+0300", eventPlace:"Budapest, HU"},
{eventId:3, eventDate: "Fri Apr 03 2015 13:41:00 GMT+0300", eventPlace:"Madrid, ES"},
{eventId:4, eventDate: "Mon Jun 01 2015 22:00:00 GMT+0300", eventPlace:"London, EN"}
];
// sort the events
var sortedEvents = events.sort(function(a, b) {
return new Date(a.eventDate) - new Date(b.eventDate);
});
var now = new Date("Sun Apr 05 2015 15:00:00");
var futureEvents = [];
var previousEvents = [];
// finding out the next event. Go from the earliest to the newest. When you find the first later than "now", get it
for(var i = 0; i < sortedEvents.length; i++){
if(new Date(sortedEvents[i].eventDate) > now) {
futureEvents.push(sortedEvents[i]);
}
}
// finding out the previous event. Go from the newest to the earliest and when you find the first earlier than "now", get it
for(var i = sortedEvents.length - 1; i >= 0; i--){
if(new Date(sortedEvents[i].eventDate) < now) {
previousEvents.push(sortedEvents[i]);
}
}
console.log("now: " + now);
console.log("next event: " + futureEvents.length ? futureEvents[0].eventDate : undefined);
console.log("previous event: " + previousEvents.length ? previousEvents[0].eventDate : undefined);
代码笔:http://codepen.io/andrerpena/pen/WbBwbG
如果您希望获得多个未来事件,或多个先前事件。。只是通过CCD_ 7或CCD_。例如,接下来的两个事件是futureEvents[0]
和futureEvents[1]
以下是如何简单地使用开源项目jinqJs
var events = [
{eventId:1, eventDate: "Wen Apr 01 2015 18:41:00 GMT+0300", eventPlace:'Dortmund, DE'},
{eventId:2, eventDate: "Sun Apr 05 2015 23:41:00 GMT+0300", eventPlace:'Budapest, HU'},
{eventId:3, eventDate: "Fri Apr 03 2015 13:41:00 GMT+0300", eventPlace:'Madrid, ES'},
{eventId:4, eventDate: "Mon Jun 01 2015 22:00:00 GMT+0300", eventPlace:'London, EN'},
{eventId:100, eventDate: "Mon Aug 31 2015 22:00:00 GMT+0300", eventPlace:'London, EN'}
]
;
var result1 = jinqJs().from(events).orderBy('eventDate').where(function(row){return Date.parse(row.eventDate) < Date.parse('Sun Apr 05 2015 15:00:00');}).top(1).select();
var result2 = jinqJs().from(events).orderBy('eventDate').where(function(row){return Date.parse(row.eventDate) > Date.parse('Sun Apr 05 2015 15:00:00');}).bottom(1).select();
var result = jinqJs().from(result1,result2).select();
document.body.innerHTML += '<pre>' + JSON.stringify(result, null, 2) + '</pre><br><br>';
<script src="https://rawgit.com/fordth/jinqJs/master/jinqjs.js"></script>
相关文章:
- 如何使用javascript以操纵的UTC格式获取当前日期
- 如何在 Node.js 中获取当前日期和微秒的时间戳
- Javascript 获取当前日期,而不考虑时区
- 如何在javascript中获取当前日期的第n个工作日
- 如何在Javascript中获取当前日期,月份和年份,而不是用户PC的日期,月份和年份
- 以毫秒 (UTC) 为单位获取当前日期(不使用字符串)
- 如何在 websql 中获取当前日期和时间
- 在 JavaScript/Jquery 中以 DD-Mon-YYY 格式获取当前日期
- 以 ng 样式获取当前日期 - Angularjs
- 在 JavaScript 中获取当前日期和时间
- 如何在HTML中获取当前日期和时间并对其进行格式化
- 使用HTTP日期格式的javascript获取当前日期
- 如何在MOMENT.JS动态中获取当前日期
- Jquery/JEasyUI如何获取当前日期
- 添加获取当前日期,并在下一个值上添加5天
- 如何在高图上获取当前日期和时间
- 如何在jQuery中获取当前日期
- 使用带有月全名的JS获取当前日期
- 在HTML5画布中获取当前日期和时间
- 获取当前日期和时间并将其附加到字符串