我想根据毫秒(纪元)时间戳计算数组中的索引。该数组长度为 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 实例。
此函数返回与您的相同的值:
在我的测试中,该函数的执行速度比原始函数快约 50 倍。
以下是我测试和测量的方法。请注意,我将第一个
const
声明移出了你的函数,因为每次调用时都对其进行评估很浪费时间: