2011-07-09 10 views
9

Tengo un objeto de fecha creado a partir de vars guardado en una base de datos.Necesito calcular un tiempo transcurrido entre dos objetos de fecha

var prevTime = Date(year,month,day,hour,minute); 

Quiero calcular la diferencia entre esto y la hora actual.

var thisTime = Date(); 

estoy haciendo esto:

prevTime.getTime() - thisTime.getTime(); 

Me da un número negativo que es muy grande. Divido por 1000 para obtener segundos y luego divido por 3600 para obtener horas. Necesito un tiempo transcurrido en horas. Termino con un número que es como -756.00. Si la hora actual es mayor que la hora anterior, ¿por qué el número es negativo? ¿Qué estoy haciendo mal?

Gracias,

de Scott

+5

Porque estás restando la hora actual de la vez anterior. Tienes que restar el anterior tiempo desde la hora actual: 'thisTime - prevTime'. –

+1

posible duplicado de [¿Cómo restar fecha/hora en javascript?] (Http://stackoverflow.com/questions/4944750/how-to-subtract-date-time-in-javascript) –

Respuesta

11

La hora actual es mayor que el tiempo anterior para restar un número mayor de un número menor le da un número negativo. Invierta el orden si desea la diferencia positiva en veces. ¿Hay más en la pregunta que eso?

demostración aquí: http://jsfiddle.net/jfriend00/NYSsp/

var prevTime = new Date(2011,1,1,0,0); // Feb 1, 2011 
var thisTime = new Date();    // now 
var diff = thisTime.getTime() - prevTime.getTime(); // now - Feb 1 
alert(diff/(1000*60*60*24));  // positive number of days 
+0

Sí. Me disculpo. Estaba nervioso cuando escribí la pregunta. Estoy haciendo thisTime.getTime() - prevTime.getTime(); Cuando depuro o salgo a la consola, veo que la fecha actual es más grande que la anterior. Todavía parece obtener el número negativo que es demasiado grande. ¿Alguna idea? – llihttocs

+0

Mira mi violín para ver un ejemplo de trabajo. Este tipo de código debe ser: var prevTime = new Fecha (año, mes, día, hora, minuto); con el "nuevo" en él si desea poder llamar a los métodos getTime(). – jfriend00

+0

Después de más depuraciones, el problema parece provenir de cómo creo el objeto de fecha anterior. Aquí hay un fragmento de código: – llihttocs

0

Primero uno debe ser más pequeño que se obtiene negativo. Su primera cita es en el pasado.

Aquí se muestra un ejemplo:

var a = new Date(2011,7,5,2,1,1) - new Date(2011,7,5,1,1,1); 
alert(a); // 3600000 which is millisecond for 1 hour. Divide by this to get hours. 
+0

Gracias por su ejemplo. Encontré el problema. Lo describo arriba. – llihttocs

-1

Comprobar esto:

var first = new Date(); 
for(i = 0; i<10000; i++) // Some loop to make a little time pass 
{ 
    i = i; 
} 
var second = new Date(); 

second.getTime() - first.getTime(); 
+0

Gracias por su ejemplo. Como mencioné anteriormente, encontré el problema. – llihttocs

+0

Nunca bloquees. Use un [Timer] (https://www.w3.org/TR/2011/WD-html5-20110525/timers.html) en su lugar – Pho3nixHun

0

SI usted quiere Fecha y hora en el dinámico Ejecutar en la página Web y también el tiempo de sesión es decir, el reloj comienza a partir de la inicio de la función java scipt y también indica cuántas horas, minutos y segundos está en línea en la aplicación o en una página web particular. Para esto simplemente llame a la función javascript en la carga del cuerpo html.

<script type="text/javascript"> 
var second; 
var first = new Date; 
function date_time() { 
    var id = 'Label1' 
    date = new Date; 
    second = date.getTime(); 
    year = date.getFullYear(); 
    month = date.getMonth(); 
    months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); 
    d = date.getDate(); 
    day = date.getDay(); 
    days = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); 
    h = date.getHours(); 
    if (h < 10) { 
     h = "0" + h; 
    } 
    m = date.getMinutes(); 
    if (m < 10) { 
     m = "0" + m; 
     //min = min+1; 
    } 
    s = date.getSeconds(); 
    if (s < 10) { 
     s = "0" + s; 
     //sec = sec+1; 
    } 
    var timeDiff = second - first.getTime(); 
    var hours = Math.floor(timeDiff/(1000 * 60 * 60)); 

    timeDiff -= hours * (1000 * 60 * 60); 



    var mins = Math.floor(timeDiff/(1000 * 60)); 

    timeDiff -= mins * (1000 * 60); 

    var secs = Math.floor(timeDiff/1000) 
    timeDiff -= secs * 1000; 

    result = 'LoginTime(HH:MM:SS) ' + hours + ':' + mins + ':' + secs + ' ' + days[day] + ' ' + months[month] + ' ' + d + ' ' + year + ' Clock(24hr): ' + h + ':' + m + ':' + s; 
    document.getElementById(id).innerHTML = result; 
    setTimeout('date_time("' + id + '");', '1000'); 
    return true; 
} 

Por Santosh Kumar Murarkar

Cuestiones relacionadas