カスタム カレンダーの作業中に、他の時間帯と重複する時間帯を見つける方法がわかりません。
タイム スロットは 0 から 720 までです (各ピクセルが分を表す午前 9 時から午後 9 時まで)。
var events = [
{id : 1, start : 0, end : 40}, // an event from 9:00am to 9:40am
{id : 2, start : 30, end : 150}, // an event from 9:30am to 11:30am
{id : 3, start : 20, end : 180}, // an event from 9:20am to 12:00am
{id : 4, start : 200, end : 230}, // an event from 12:20pm to 12:30pm
{id : 5, start : 540, end : 600}, // an event from 6pm to 7pm
{id : 6, start : 560, end : 620} // an event from 6:20pm to 7:20pm
];
各時間枠は1 時間です。たとえば、9 時から 10 時、10 時から 11 時、11 時から 12 時などです。
上記の例では、3 つのイベント (id: 1,2,3) が9-10
開始時刻で重複しています: 9:00
、9:30
および9:20
。また、重複する他のイベントは、開始時刻と開始時刻の int タイム スロット6
( id :7
5, 6)です。ID の予定には、時間帯 からまでの重複する予定はありません。6
6:20
4
12
1
重複するすべてのイベント ID と特定のタイム スロットのイベント数を取得する方法を探しています。これは期待される出力です。
[
{id:1, eventCount: 3},
{id:2, eventCount: 3},
{id:3, eventCount: 3},
{id:5, eventCount: 2},
{id:6, eventCount: 2}
]
ID (1 から 3) には3
、時間帯 to のイベントと時間帯toのイベント9
が10
あります。2
6
7
時間数を実際の時間に変換するために、次の式を作成しました。
var start_time = new Date(0, 0, 0, Math.abs(events[i].start / 60) + 9, Math.abs(events[i].start % 60)).toLocaleTimeString(),
var end_time = new Date(0, 0, 0, Math.abs(events[i].end / 60) + 9, Math.abs(events[i].end % 60)).toLocaleTimeString();
これは私がこれまでに持っているものです:
function getOverlaps(events) {
// sort events
events.sort(function(a,b){return a.start - b.start;});
for (var i = 0, l = events.length; i < l; i++) {
// cant figure out what should be next
}
}