gpt4 book ai didi

javascript - jQuery 从时间集数组中挑选出时间范围

转载 作者:行者123 更新时间:2023-12-02 13:47:42 25 4
gpt4 key购买 nike

我使用 jQuery 来处理一小时时间集的数组,例如:

{hours[0] = '12a-1a',
hours[1] = '1a-2a',
hours[2] = '2a-3a',
hours[3] = '2p-3p',
hours[4] = '9p-10p',
hours[5] = '10p-11p'}

想知道是否有人知道如何从上述数组中的一系列连续小时中提取开始和结束时间,例如:

范围 1:12a-3a

范围 2:2p-3p

范围 3:9p-11p

最终目标是我想向用户显示汇总范围,如下所示:

您选择了:12a-3a、2p-3p 和 9p-11p

到目前为止,我知道如何显示用户选择的唯一方法是显示小时数组中的每个系列。在大型场景中,这最终会导致屏幕上无法显示太多内容。

如有任何帮助,我们将不胜感激!

最佳答案

由于数据是自定义字符串格式,因此需要执行以下操作:

  • 将字符串时间转换为时间值条目
  • 合并相邻时间范围
  • 将合并的时间范围转换回显示格式
  • 使用“and”显示串联结果

代码示例:https://jsfiddle.net/TrueBlueAussie/bjjwwaq1/3/

var hours = [];
hours[0] = '12a-1a', hours[1] = '1a-2a', hours[2] = '2a-3a', hours[3] = '2p-3p', hours[4] = '9p-10p', hours[5] = '10p-11p';

// Convert a time like 1p-2p etc to an hour value pair
function convertToValue(hours) {
// convert midnight to hour 0
hours = hours.replace(/12a/, '0a');
var parts = hours.split('-');
var start = parseInt(parts[0]);
if (parts[0].match(/p/)) {
start += 12;
}
var end = parseInt(parts[1]);
if (parts[1].match(/p/)) {
end += 12;
}
return {
start: start,
end: end
};
}

// Return a number in the range 0-23 as a string 12am, 11pm etc
function formatTime(time) {
if (!time) {
return "12a";
} else if (time == 12) {
return "12p";
} else if (time > 12) {
return (time - 12) + "p";
}
return time + "a";
}

// Convert an entry with start and end time to a formatted time like 1p-3p
function formattedTime(item) {
return formatTime(item.start) + '-' + formatTime(item.end);
}

// Collect the converted results
var results = [];
$.each(hours, function(i, hours) {
results.push(convertToValue(hours));
});

// Merge any adjacent times together
var merged = [];
$.each(results, function(i, result) {
// If not first entry, see if this entry extends the previous entry
if (i && result.start == results[i - 1].end) {
// Extend the previous entry
merged[merged.length - 1].end = result.end;
} else {
merged.push(result);
}
});

// Save the new formatted output
var output = [];
$.each(merged, function(i, time) {
output.push(formattedTime(time));
})

// Combine with "and" to get final result
console.log(output.join(" and "));

输出结果:

12a-2a and 2p-3p and 9p-10p

关于javascript - jQuery 从时间集数组中挑选出时间范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41245879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com