【问题标题】:Break Javascript array of timestamps into smaller arrays by hour, day按小时、天将 Javascript 时间戳数组分解为更小的数组
【发布时间】:2015-08-27 22:37:17
【问题描述】:

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

我这样做对吗?

【问题讨论】:

  • 你有机会在这段代码中访问 lodash/underscore 吗?
  • 您想要在任何日期或特定日期的 00:00 到 01:00 之间的时间吗?一般来说,最好将日期处理为日期而不是字符串。

标签: javascript arrays timestamp


【解决方案1】:

通常最好将日期作为 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 之间),则将它们转换为日期可能更合适。

【讨论】:

    【解决方案2】:

    JavaScript 日期实例有一个函数 .getTime() 来获取毫秒数,更多 http://www.w3schools.com/jsref/jsref_gettime.asp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      • 2014-04-05
      相关资源
      最近更新 更多