获取按天分组的时间

时间:2016-05-19 16:23:00

标签: javascript jquery algorithm

我有一个对象:

var daysMapping = { 1: "MON", 2: "TUE", 3: "WED", 4: "THU", 5: "FRI", 6: "SAT", 7: "SUN" };

和一系列对象:

var timingsArr = [{ StartTime: "09:00:00",  EndTime: "13:00:00",  Days: [2,3,4,5] }, 
 { StartTime: "16:00:00",  EndTime: "19:00:00",  Days: [2,3,4,5,6]},
 { StartTime: "09:00:00",  EndTime: "14:00:00",  Days: [6,7] }];

我需要按以下方式分组时间:

TUE - FRI

上午9:00 - 下午1:00

下午4:00 - 晚上7:00

SAT

上午9:00 - 下午2:00

下午4:00 - 晚上7:00

SUN

上午9:00 - 下午2:00

我需要在javascript中编写代码才能获得这样的时间。这里我需要工作日的数据。如果某些日子的时间相同,那么这些时间可以分组。但是,任何语言都接受解决方案。

1 个答案:

答案 0 :(得分:1)

这是一项尝试将相同时间分组到日期组的提案。

它使用对象grouped表示具有时间的日期,稍后使用数组combined作为结果集。

我跳过了改变12h时钟显示的部分。

var daysMapping = { 1: "MON", 2: "TUE", 3: "WED", 4: "THU", 5: "FRI", 6: "SAT", 7: "SUN" },
    days = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"],
    timingsArr = [{ StartTime: "09:00:00", EndTime: "13:00:00", Days: "[2,3,4,5]" }, { StartTime: "16:00:00", EndTime: "19:00:00", Days: "[2,3,4,5,6]" }, { StartTime: "09:00:00", EndTime: "14:00:00", Days: "[6,7]" }],
    grouped = {},
    combined = [];

timingsArr.forEach(function (a) {
    var days = JSON.parse(a.Days).forEach(function (d) {
        grouped[daysMapping[d]] = grouped[daysMapping[d]] || [];
        grouped[daysMapping[d]].push(a.StartTime + ' ' + a.EndTime);
    });
});
days.forEach(function (day, i) {
    if (!i || JSON.stringify(this.last.data) !== JSON.stringify(grouped[day])) {
        this.last = { days: [day], data: grouped[day] };
        combined.push(this.last);
        return;
    }
    this.last.days[1] =day;
}, {});

combined.forEach(function (a) {
    var p;
    if (a.data) {
        a.data.sort();
        p = document.createElement('p');
        p.innerHTML = '<strong>' + a.days.join(' - ') + '</strong><br>' + a.data.join('<br>');
        document.body.appendChild(p);
    }
});