我有一个这种类型的对象数组。
Obj = { timeEnd:"06:45 AM",
timeStart:"04:23 AM"
}数组的类型为obj1、obj2、.。
这个数组定义了花在活动上的时间。
我希望重新创建这个数组或将其转换为按时间顺序排列的数组,如
obj = { '4-5 AM' : 37,
'5-6 AM' : 60,
'6-7 AM' : 45
}我一直在努力寻找,无济于事。我是个菜鸟。
如果你需要其他信息,请告诉我。最终目标是创建一个按小时划分的chart.js图
发布于 2016-06-27 21:38:00
您可以将24小时的值除以并计数,直到到达目标时间为止,然后再将其余的分钟添加。
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' }));
发布于 2016-06-29 05:24:26
下面是如何解决这个问题的一个实现。考虑使用Map对象,可以利用Object区分(如果没有时间重叠的话)和Array长度。
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)
发布于 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
https://stackoverflow.com/questions/38052957
复制相似问题