按小时,每天将Javascript时间戳数组分成更小的数组

时间:2015-06-12 02:00:00

标签: javascript arrays timestamp

我有一个对象数组,每个对象都包含一个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)
}

我能以正确的方式解决这个问题吗?

2 个答案:

答案 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