2012-09-04 11 views
5

El xkcd historieta popular que plantea esta ecuación para la conversión de tiempo completo en una fecha:'atrás en el tiempo' xkcd

Backward in Time

que he estado tratando de hacer lo mismo en JavaScript, aunque me siguen dando -Infinity . Aquí está el código:

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"); 

Tiempo devolverá un número enorme (milisegundos), y sé que la ecuación no tiene la intención de hacer frente a milisegundos - así que ¿cómo podría uno hacer una ecuación fecha avanzada con JavaScript?

+0

milisegundos reescalar a una unidad de tiempo diferente. como femtoseconds –

Respuesta

2

usted ha hecho 3 errores:

  1. p debe ser un decimal entre 0 y 1 para indicar la relación entre el progreso completado.
  2. El resultado es:
    T = (current date) - (a number in years)
    no
    T = (current date - a number) in years
    Es necesario calcular primero y luego restar (e^…-e^3) que muchos años de t
  3. Usted ha olvidado un +3 que estaba en la fórmula original

EDIT:

He aquí algunos working code as a JSFiddle, aunque Javascript se queda sin fechas en torno al 75% completado

+0

¿Hay alguna manera de continuar a 100 (o 99)? – Christopher

+0

Bueno, obviamente 'la fecha se descompuso porque no había realmente el concepto de" octubre "allá por el 105000 antes de Cristo. Entonces, podrías decidir que pasado cierto punto todo lo que quieres es calcular un año, lo cual puedes hacer con los cálculos que tienes – Gareth

+0

Sé que parece como si fuera una especie de idiota grover que acaba de entrar en JavaScript y haciendo todas las preguntas incorrectas, pero por alguna razón este problema simplemente se me escapó. Gracias por el consejo de Gareth, veré qué puedo hacer con todo esto. – Christopher

2

El porcentaje

var p = 5; // Percent Complete 

debería ser en realidad fraction complete, por lo que se convierte en 0.05 de 5%. Luego, cuando se vaya hacia la finalización, p se acerca a 1 y el tiempo se aproxima a un límite finito.

Con p = 5 de 5% de avance, el tiempo restado se acercaría (más o menos)

exp(20.3444*10^6) 

cuando la terminación se acerca, que ahora excede el rango de double, ya exp(40) es millones de veces la edad del universo y exp(1000) excede double rango.

+0

Esto en sí mismo no es todo el problema – Gareth

Cuestiones relacionadas