2011-07-09 8 views
9

Ho un oggetto data creato da vars salvati in un database.Ho bisogno di calcolare un tempo trascorso tra due oggetti data

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

Voglio calcolare la differenza tra questo e l'ora corrente.

var thisTime = Date(); 

sto facendo questo:

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

Mi dà un numero negativo che è molto grande. Io divido per 1000 per ottenere secondi e poi divido per 3600 per ottenere ore. Ho bisogno di un tempo trascorso in poche ore. Finisco con un numero che è come -756,00. Se l'ora corrente è più grande della volta precedente, perché il numero è negativo? Che cosa sto facendo di sbagliato?

Grazie,

Scott

+5

Perché si sta sottraendo l'ora attuale dal momento precedente. Devi sottrarre il prev. tempo dall'ora corrente: 'thisTime - prevTime'. –

+1

possibile duplicato di [Come sottrarre data/ora in javascript?] (Http://stackoverflow.com/questions/4944750/how-to-subtract-date-time-in-javascript) –

risposta

11

L'ora corrente è più grande della volta precedente in modo da sottrarre un numero maggiore da un numero minore ti dà un numero negativo. Invertire l'ordine se vuoi la differenza positiva in tempi. C'è di più nella domanda?

Dimostrazione qui: 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ì. Chiedo scusa. Ero nervoso quando ho digitato la domanda. Sto facendo thisTime.getTime() - prevTime.getTime(); Quando eseguo il debug o l'output sulla console, vedo che la data corrente è più grande della precedente. Continuo a ricevere il numero negativo che è troppo grande. qualche idea? – llihttocs

+0

Guarda il mio violino per un esempio funzionante. Questo tipo di codice deve essere: var prevTime = new Date (anno, mese, giorno, ora, minuto); con il "nuovo" in esso se vuoi essere in grado di chiamare i metodi getTime(). – jfriend00

+0

Dopo ulteriori debug, il problema sembra provenire dal modo in cui creo il precedente oggetto data. Ecco uno snippet di codice: – llihttocs

0

In primo luogo si deve essere più piccolo che si ottiene negativo. Il tuo primo appuntamento è nel passato.

Ecco un esempio:

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

Grazie per il tuo esempio. Ho trovato il problema. Lo descrivo sopra. – llihttocs

-1

Controllare questo:

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

Grazie per il tuo esempio. Come ho detto sopra, ho trovato il problema. – llihttocs

+0

Non bloccare mai. Utilizzare invece un [Timer] (https://www.w3.org/TR/2011/WD-html5-20110525/timers.html) – Pho3nixHun

0

SE volete data e ora nel dinamico Esegui pagina Web e anche il tempo Accesso cioè l'orologio parte dal l'avvio della funzione java scipt e fornisce anche quante ore, minuti e secondi si è in linea nell'applicazione o in una particolare pagina Web. Per questo basta chiamare la funzione javascript nel carico del corpo 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; 
} 

di Santosh Kumar Murarkar

Problemi correlati