首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何按小时对数据进行排序?

如何按小时对数据进行排序?
EN

Stack Overflow用户
提问于 2016-06-27 11:36:58
回答 4查看 98关注 0票数 4

我有一个这种类型的对象数组。

代码语言:javascript
复制
Obj = { timeEnd:"06:45 AM",
        timeStart:"04:23 AM"
      }

数组的类型为obj1、obj2、.

这个数组定义了花在活动上的时间。

我希望重新创建这个数组或将其转换为按时间顺序排列的数组,如

代码语言:javascript
复制
obj = { '4-5 AM' : 37,
        '5-6 AM' : 60,
        '6-7 AM' : 45
      }

我一直在努力寻找,无济于事。我是个菜鸟。

如果你需要其他信息,请告诉我。最终目标是创建一个按小时划分的chart.js图

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-06-27 21:38:00

您可以将24小时的值除以并计数,直到到达目标时间为止,然后再将其余的分钟添加。

代码语言:javascript
复制
function getHourParts(object) {

    function getKey(h) {
       return h + '-' + (h + 1);
    }

    function getTime(s) {
        var t = s.split(':').map(Number);
        return { h: t[0], m: t[1] };
    }

    var result = {},
        start = getTime(object.timeStart),
        end = getTime(object.timeEnd);

    while (start.h < end.h) {
        result[getKey(start.h)] = 60 - start.m;
        ++start.h;
        start.m = 0;
    }
    result[getKey(end.h)] = end.m - start.m;
    return result;
}

console.log(getHourParts({ timeStart: '04:23', timeEnd: '06:45' }));
console.log(getHourParts({ timeStart: '12:03', timeEnd: '12:05' }));

票数 3
EN

Stack Overflow用户

发布于 2016-06-29 05:24:26

下面是如何解决这个问题的一个实现。考虑使用Map对象,可以利用Object区分(如果没有时间重叠的话)和Array长度。

代码语言:javascript
复制
var durations = [{timeStart: "04:23 AM", timeEnd: "06:45 AM", }, {timeStart: "09:23 AM", timeEnd: "11:30 AM", }, {timeStart: "11:09 PM", timeEnd: "01:19 PM", }];

function getValue(time) {
	var [hour, minute, period] = time.replace(':', ' ').split(' ');
	var date = new Date();
	date.setHours((period === 'PM' ? 12 : 0) + +hour, +minute);
	return date;
}

var result = {};

durations.forEach(duration => {
	var time = getValue(duration.timeStart),
		end = getValue(duration.timeEnd);

	for (var hour = time.getHours(); hour <= end.getHours(); hour++) {
		var endMinute = hour === end.getHours() ? end.getMinutes() : 59,
			minute = 0,
			hourSpan = `${hour}-${hour + 1}`;

		result[hourSpan] = result[hourSpan] || new Map;
		while (minute <= endMinute)
			result[hourSpan].set(minute, minute++);
	}
});
Object.keys(result).forEach(span => {
	result[span] = result[span].size;
});
console.clear();
console.log(result)

票数 2
EN

Stack Overflow用户

发布于 2016-06-27 11:38:40

通过将输入字符串中的时间解析为date对象,然后比较date对象,可以做到这一点:

这里的工作演示:http://live.datatables.net/erefom/2/edit#preview

资料来源:http://live.datatables.net/erefom/2/edit

还请看这个答案:What is the best way to parse a time into a Date object from user input in Javascript

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38052957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档