我想从毫秒(纪元)时间戳计算数组的索引。该数组长 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
?
当您使用 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;