根据时间戳生成斐波那契数列

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

var dates = [
    "2020-03-07T17:22:00.000Z",
    "2020-03-13T04:56:00.000Z"
];

var convertedDates = dates.map(date => new Date(date).getTime());

console.log(convertedDates);

var i;
var fib = convertedDates;
var limit = 5;
for (i = 2; i < limit; i++) {
  fib[i] = fib[i - 2] + fib[i - 1];
}

fib.forEach(item => console.log(new Date(item).toISOString()));

控制台输出:

[ 1583601720000, 1584075360000 ]
2020-03-07T17:22:00.000Z
2020-03-13T04:56:00.000Z
2070-05-18T22:18:00.000Z
2120-07-30T03:14:00.000Z
2220-12-16T01:32:00.000Z

想法是基于2个时间戳生成斐波那契数列。显然,输出不会给我预期的结果。我想念什么?

javascript datetime timestamp fibonacci
1个回答
0
投票

getTime返回的值是一个时间值,它是从1970-01-01T00:00:00Z开始的偏移量。因此,当您执行以下操作时,请从2020-03-07和2020-03-13的日期开始(大约):

fib[i] = fib[i - 2] + fib[i - 1]

对于您正在执行的第一次迭代(大约):

fib[i] = (50 years, 2 months, 7 days) + (50 years, 2 months, 13 days);
// Which is equivalent to
fib[i] = (100 years, 4 months, 20 days);

然后,当您这样做:

new Date(item).toISOString()

您正在做:

1970-01-01 + (100 years, 4 months, 20 days);

哪个是2070-05-20。依此类推,直到达到极限为止。

[不知道您期望的结果,今天无法解释为什么您没有看到想要的东西。

© www.soinside.com 2019 - 2024. All rights reserved.