2011-07-09 12 views
9

Mam obiekt daty utworzony z vars zapisanych w bazie danych.Potrzebuję obliczyć upływ czasu między dwoma obiektami daty

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

Chcę obliczyć różnicę między tym a bieżącym czasem.

var thisTime = Date(); 

Robię to:

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

Daje mi negatywny liczbę, która jest bardzo duża. Dzielę przez 1000, aby uzyskać sekundy, a następnie podzielić przez 3600, aby uzyskać godziny. Potrzebuję upływu czasu w ciągu kilku godzin. Kończę się liczbą, która wynosi -756.00. Jeśli aktualny czas jest większy niż poprzedni, dlaczego liczba jest ujemna? Co ja robię źle?

Dzięki,

Scott

+5

bo jesteś odjęcie aktualny czas z poprzedniego pomiaru. Musisz odjąć prev. czas od bieżącego czasu: 'thisTime - prevTime'. –

+1

możliwy duplikat [Jak odjąć datę/czas w javascript?] (Http://stackoverflow.com/questions/4944750/how-to-subtract-date-time-in-javascript) –

Odpowiedz

11

Obecny czas jest większy niż poprzednim razem tak odjęcie większą liczbę z mniejsza liczba daje liczbę ujemną. Odwróć kolejność, jeśli chcesz uzyskać dodatnią różnicę w czasie. Czy jest coś więcej niż to pytanie?

Demonstracja tutaj: 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

Tak. Przepraszam. Byłem zdenerwowany, gdy wpisałem pytanie. Robię thisTime.getTime() - prevTime.getTime(); Kiedy debuguję lub wyprowadzam na konsolę, widzę, że aktualna data jest większa niż poprzednia. Ciągle wydaje mi się, że otrzymuję ujemną liczbę, która jest o wiele za duża. jakieś pomysły? – llihttocs

+0

Spójrz na moje skrzypce na przykład pracy. Ten typ kodu musi być: var prevTime = new Data (rok, miesiąc, dzień, godzina, minuta); z "nowym" w nim, jeśli chcesz móc wywoływać metody getTime(). – jfriend00

+0

Po kolejnym debugowaniu problem wydaje się pochodzić z tego, jak utworzyć poprzedni obiekt daty. Oto fragment kodu: – llihttocs

0

Pierwszy z nich musi być mniejszy, że masz ujemny. Twoja pierwsza randka jest w przeszłości.

Oto przykład:

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

Dzięki za twój przykład. Znalazłem problem. Opiszę to powyżej. – llihttocs

-1

Sprawdź to:

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

Dziękuję za twój przykład. Jak wspomniałem powyżej, znalazłem problem. – llihttocs

+0

Nigdy nie blokuj. Zamiast tego użyj [Timer] (https://www.w3.org/TR/2011/WD-html5-20110525/timers.html) – Pho3nixHun

0

JEŚLI chcesz daty i czasu w dynamicznych uruchomić na stronę sieci Web, a także czas Logowanie czyli zegar zaczyna się od początek scipt funkcji java, a także podaje ile godzin, minut i sekund jesteś online w aplikacji lub konkretnej stronie internetowej. W tym celu wywołaj funkcję javascript w ładowaniu 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; 
} 

Przez Santosh Kumar Murarkar

Powiązane problemy