根据时间戳计算索引

问题描述 投票:0回答:1

我想从毫秒(纪元)时间戳计算数组的索引。该数组长 167,每个索引是一周中的小时(即索引

0
指向星期一的 0:00,
24
指向星期二的 0:00,
28
指向星期二的 4:00,...)。我找到了这个解决方案,它有效:

function getIndex(timestamp) {
  const hoursInDay = 24;
  const date = new Date(timestamp);
  const dayIndex = (date.getUTCDay() + 6) % 7; // index from Monday
  const hourIndex = date.getUTCHours();
  return dayIndex * hoursInDay + hourIndex;
}

问题是这非常慢。我们有几千个这样的时间戳,处理它们的时间非常有限。

是否有一种纯粹的数值方法可以达到相同的效果,这样我们就不必每次都构造和使用

Date

javascript algorithm performance
1个回答
0
投票

当您使用 UTC 日期时间时,不存在与时区相关的复杂性,我们可以避免创建 Date 实例。

此函数返回与您相同的返回值:

const HOUR = 3600000;
const DAY = 24;
const THREE_DAYS = 3 * DAY;
const WEEK = 7 * DAY;

const getIndex = timestamp => (Math.floor(timestamp / HOUR) + THREE_DAYS) % WEEK;
© www.soinside.com 2019 - 2024. All rights reserved.