我有一个对象数组,每个对象都包含一个ID和时间戳,如下所示:
var data = [
{
id: 1,
date: '2015-01-01T00:00:00Z'
},
{
id: 2,
date: '2015-01-03T03:00:00Z'
},
{
id: 3,
date: '2015-01-03T09:00:00Z'
},
{
id: 4,
date: '2015-01-05T00:00:00Z'
},
]
我想按小时和天计算这些物品的数量。所以我需要知道有多少时间戳在00:00到01:00,01:00和02:00等。同样,我需要找到有多少时间戳在2015-01-03和2015-01之间-04等。
我的第一直觉是循环一天中的几小时/几天,并在其中,再次循环遍历表格中的行和
if (val.date() >> hourIterator && val.date() << (hourIterator + 1)) {
new_array.push(val)
}
我能以正确的方式解决这个问题吗?
答案 0 :(得分:0)
通常最好将日期作为Date对象处理,但是在某些情况下你可以将它们视为字符串。
以下计算某个范围内的特定部分(包括限制),但只考虑一个因素:
var data = [
{id: 1, date: '2015-01-01T00:00:00Z'},
{id: 2, date: '2015-01-03T03:00:00Z'},
{id: 3, date: '2015-01-03T09:00:00Z'},
{id: 4, date: '2015-01-05T00:00:00Z'},
];
/* @param {string} part - name of part to compare, e.g. 'day', 'hour'
** @param {string/number} low - value for start of range
** @param {string/number} high - value for end of range
** @returns {number} - count of values in range, inclusive
*/
function countInRange(part, low, high) {
var partNames = {year:0, month:1, day:2, hour:3, min:4, sec:5};
var n = partNames[part];
var count = 0;
data.forEach(function(obj) {
var b = obj.date.split(/\D/);
if (b[n] >= low && b[n] <= high) {
count++;
}
});
return count;
}
console.log(countInRange('day',1,2)); // 1
console.log(countInRange('day',1,3)); // 3
console.log(countInRange('day',4,6)); // 1
console.log(countInRange('min',0,10)); // 4
如果您想考虑其他因素(例如在特定日期或日期范围的02:00和06:00之间),那么将它们转换为日期可能更合适。
答案 1 :(得分:-1)
JavaScript日期实例有一个函数.getTime()
来获取毫秒数,更多http://www.w3schools.com/jsref/jsref_gettime.asp