MomentJS-一种在过去24小时内获取小时价格的更干净的方法

时间:2018-10-01 20:57:33

标签: javascript arrays object for-loop momentjs

非常感谢您提供的所有帮助。我会尽力描述这一点。

我想做的是从包含每分钟更新价格的数组中获取价格列表。具体来说,我想要过去24小时内每小时价格的清单。因此,一天有效的24个价格。每个价格都有一个时间戳,因此我正在使用momentJS isBeforeisAfter来缩小搜索范围。

下面的代码显示了过去两个小时内如何获取所需的数据。这很好。但是我不觉得重复24次是不对的。循环应该能够满足我的需求,但是我不确定如何实现它。非常感谢您的帮助。很抱歉,如果我没有很好地描述这个问题

const lastHourArray = [];
    const lastHourArray2 = [];
    lodash.forEach(tickerHistoryData, (data) => {
        const dateNow = moment();
        const prevHour = moment().subtract(1, 'hours');
        const prevTwoHours = moment().subtract(2, 'hours');
        const instanceDate = moment(data[0]);
        const isItAnHourAgo = instanceDate.isBefore(dateNow) && instanceDate.isAfter(prevHour);
        const isItTwoHoursAgo = instanceDate.isBefore(prevHour) && instanceDate.isAfter(prevTwoHours);

        if (isItAnHourAgo) {
            const hourObject = {
                hour: 1,
                price: data[4],
            };
            lastHourArray.push(hourObject);
        }
        if (isItTwoHoursAgo) {
            const hourObject2 = {
                hour: 2,
                price: data[4],
            };
            lastHourArray2.push(hourObject2);
        }
    });
    tickerInstruments[findInstrument.productSymbol].hourlyPrice.push(lastHourArray[lastHourArray.length - 1]);
    tickers[findInstrument.name].hourlyPrice.push(lastHourArray[lastHourArray.length - 1]);
    tickerInstruments[findInstrument.productSymbol].hourlyPrice.push(lastHourArray2[lastHourArray2.length - 1]);
    tickers[findInstrument.name].hourlyPrice.push(lastHourArray2[lastHourArray2.length - 1]);

1 个答案:

答案 0 :(得分:1)

lodash.forEach(tickerHistoryData, (data) => {
  const dateNow = moment();
  const instanceDate = moment(data[0]);

  for (let i = 1; i <= 24; i++) {
    const prevHour = moment().subtract(i, 'hours');
    const isItAnHourAgo = instanceDate.isBefore(dateNow) && instanceDate.isAfter(prevHour);

    if (isItAnHourAgo) {
      const hourObject = {
        hour: i,
        price: data[4],
      };
      lastHourArray.push(hourObject);
    }
  }
});

您可以尝试这项工作吗? data中的每个tickerHistoryData都会循环24次并检查时间。

如果您需要检查0到23h之间的时间,请像(let i = 0; i < 24; i++)

这样修复循环