5

流行的漫画 xkcd 提出了将时间完成转换为日期的等式:

时光倒流

我一直在尝试在 JavaScript 中做同样的事情,尽管我不断得到-Infinity. 这是代码:

var p = 5; // Percent Complete 
var today = new Date(); 
today = today.getTime(); 
var t;
t = (today) - (Math.pow(Math.E, (20.3444 * Math.pow(p,3))) -
Math.pow(Math.E,3));
document.write(t + " years");

时间将返回一个巨大的数字(毫秒),而且我知道该等式并不意味着处理毫秒 - 那么如何使用 JavaScript 进行高级日期等式呢?

4

2 回答 2

2

百分比

var p = 5; // Percent Complete 

实际上应该是fraction complete,所以它变成0.05了 5%。然后当接近完成时,p接近1并且时间接近有限的限制。

完成 5% 后,减去的时间将p = 5接近(大致)

exp(20.3444*10^6)

当完成临近时,远远超出 的范围double,已经exp(40)是宇宙年龄的百万倍,exp(1000)超出double范围。

于 2012-09-04T11:41:22.610 回答
2

你犯了3个错误:

  1. p应该是一个介于 0 和 1 之间的小数,以表示已完成进度的比率。
  2. 结果是:
    T = (current date) - (a number in years)
    不是
    T = (current date - a number) in years
    你需要先计算(e^…-e^3),然后减去那么多年t
  3. 您忘记了+3原始公式中的a

编辑:

这是一些作为 JSFiddle 的工作代码,尽管 Javascript 在大约 75% 完成时已过期

于 2012-09-04T11:44:25.410 回答