如何根据当前时间在数组中查找即将发生的事件
How to find upcoming event in array based on current time
我有一个事件数组,我想遍历该数组,并根据其开始时间与当前开始时间进行比较,找到下一个即将发生的事件。
基本上,说现在是下午3:30,有活动开始于下午12点,下午2点,下午4点,下午5点…我想要下午4点开始的活动。
样本数据: {
"cache_time": 1470678992,
"events": [
{
"title": "EVENT TITLE",
"start_time": "12:00AM",
"end_time": "12:00AM"
},
{
"title": "EVENT TITLE",
"start_time": "8:00AM",
"end_time": "10:00AM"
},
{
"title": "EVENT TITLE",
"start_time": "10:00AM",
"end_time": "12:00PM"
},
{
"title": "EVENT TITLE",
"start_time": "1:00PM",
"end_time": "2:30PM"
},
{
"title": "EVENT TITLE",
"start_time": "2:30PM",
"end_time": "3:00PM"
},
{
"title": "EVENT TITLE",
"start_time": "3:00PM",
"end_time": "4:00PM"
}
]
}
编辑:到目前为止,我已经做了什么来获得当前会议,但当当前会议未知时,我很难获得下一次会议。
var _this = this;
var date = new Date();
var currentHour = date.getHours();
var currentMins = date.getMinutes();
var reqStartTime = new Date();
reqStartTime.setHours(currentHour, currentMins, 0);
var reqEndTime = new Date(reqStartTime.getTime() + 2 * 60000);
for (var e in EVENT_DATA.events) {
var start_time = EVENT_DATA.events[e].start_24time;
var end_time = EVENT_DATA.events[e].end_24time;
var startTime = new Date();
var endTime = new Date();
startTime.setHours(start_time.substring(0,2), start_time.substring(3,5), 0);
endTime.setHours(end_time.substring(0,2), end_time.substring(3,5), 0);
if ( (reqEndTime > startTime && reqEndTime < endTime) || (reqStartTime > startTime && reqStartTime < endTime) ) {
return EVENT_DATA.events[e];
}
}
因为您的start_time
是一种非标准格式,我们需要做的一件事是将其转换为可用的值。我们将把它与start_date
结合起来得到我们的比较值。
既然我们不能假设事件是有序的,我们也会考虑到这一点。
(function(data) {
var currentTime = new Date();
var getStartTime = function(event) { // This function converts the time into a usable format and returns it as a Date object
try {
return new Date(event.start_date + ' ' + event.start_time.replace(/(AM|PM)/, ' $1'));
} catch(ex) { return null; }
};
var sortedEvents = jQuery(data.events).sort(function(a, b) {
return getStartTime(a) > getStartTime(b) ? 1 : -1;
}).toArray(); // Get an array of sorted events
for (var i = 0; i < sortedEvents.length; i++) {
if (getStartTime(sortedEvents[i]) < currentTime) { continue; }
return sortedEvents[i]; // Starts now or after
}
return null; // No matches
})(sample_data);
问题的原始样本数据:
"events": [
{
"title": "EVENT TITLE",
"start_time": "12:00AM",
"end_time": "12:00AM",
"start_24time": "00:00",
"end_24time": "00:00",
"start_date": "July 29, 2016",
"end_date": "September 03, 2016",
"display_date": "July 29 - September 03, 2016"
}, ...
]
相关文章:
- 如何使用jquery迭代具有相同属性的html元素并查找onclick事件
- 查找带有边框的HTML5 Canvas(点击)事件的坐标
- 在JQuery事件中查找父元素
- 查找将 onclick 事件分配给节点的代码
- 如何将查找事件发送到嵌入了 SWFObject 2.2 的播放器
- 允许在自定义事件上“查找使用实例”的 IDE
- 如何查找触发或处理事件的 Javascript
- 如何查找特定事件上已执行的函数名称
- 用于查找基于时间的事件的最佳Javascript算法
- 如何查找jquery或javascript事件从哪个文件发生
- 如何查找已添加自定义事件侦听器的位置
- 如何从许多其他输入中查找触发键关闭事件的特定输入框
- 使用 Jquery 查找冒泡事件中的挂起事件或最后一个事件
- 如何使用 JavaScript 在 DOM 节点上查找事件侦听器
- 如何查找容器内的所有事件并委派它们
- 基于子事件查找父元素
- Ruby客户端Eventbrite API使用Javascript查找事件ID
- MVC - PartialView不能在View中查找事件
- 浏览器中是否有搜索/查找事件
- 查找事件的位置(鼠标悬停在按钮上),用于Firefox扩展