2010-12-14 13 views
8

Sprawdziliśmy: Get difference between 2 dates in javascript?javascript data różnica

I wciąż nie może uzyskać to do pracy.

var difference = data.List[0].EndDate - Math.round(new Date().getTime()/1000.0) * 1000; 
var daysRemaining = Math.floor(difference/1000/60/60/24); 
var hoursRemaining = Math.floor(difference/1000/60/60 - (24 * daysRemaining)); 
var minutesRemaining = Math.floor(difference/1000/60 - (24 * 60 * daysRemaining) - (60 * hoursRemaining)); 
var secondsRemaining = Math.floor(difference/1000 - (24 * 60 * 60 * daysRemaining) - (60 * 60 * hoursRemaining) - (60 * minutesRemaining)); 

data.List [0] .EndDate jest liczbą UTC (jak: 1291427809310 (http://www.epochconverter.com/)), który zawsze będzie późniejsza niż bieżąca data.

+0

czego oczekujesz jako wynik? –

+0

, aby pozostały prawidłowe godziny, minuty i sekundy. – williamparry

+1

Co oznacza "Nie mogę tego uruchomić"? – epascarello

Odpowiedz

5

Mówisz, że znacznik UTC to "2004-09-16T23: 59: 58.75"?

Więc w zasadzie robi

var x = "2004-09-16T23:59:58.75" - 123456 

Teraz, kiedy wyjaśnił, że, niż wymienione powyżej nie stosuje się. Nowy problem to liczba milisekund w przeszłości, więc podczas obliczania różnicy otrzymujesz liczbę ujemną. Prawdopodobnie chcesz zamienić zamówienie.

var difference = new Date().getTime()-data.List[0].EndDate; 
+0

przepraszam, moje złe, to liczba taka jak 1291427809310 – williamparry

+0

Dodano nowe informacje na podstawie tego, co powiedział w komentarzu – epascarello

3

Jeśli DataZakończenia jest w milisekundach, a getTime() zwraca milisekund, dlaczego podzielić przez 1000 tylko pomnożyć przez 1000 w tej samej linii? A jeśli potrzebujesz tylko drugiej precyzji dla całej reszty kodu, po co pracować w milisekundach? Zacznij z liczbą sekund, aby uprościć wszystkie swoje obliczenia:

var difference = Math.round((data.List[0].EndDate - new Date().getTime())/1000); 
11
function days_between(date1, date2) { 

    // The number of milliseconds in one day 
    var ONE_DAY = 1000 * 60 * 60 * 24 

    // Convert both dates to milliseconds 
    var date1_ms = date1.getTime() 
    var date2_ms = date2.getTime() 

    // Calculate the difference in milliseconds 
    var difference_ms = Math.abs(date1_ms - date2_ms) 

    // Convert back to days and return 
    return Math.round(difference_ms/ONE_DAY) 

} 

http://www.mcfedries.com/javascript/daysbetween.asp

+6

Nie zajmuje się przypadkami, w których zakres dat1 i data2 zdarzenie zmiany światła dziennego. Zobacz http://stackoverflow.com/a/15289883/850996 –

+0

W jakim formacie powinienem podać datę? – nirav

0

Pisałem a component, który robi dokładnie to, jeśli nie chcesz używać pełnego bibliotekarza y jak moment.js. Może również wyświetlać różnicę w dowolnej jednostce czasu (dni, tygodnie, miesiące, minuty, godziny itp.).

Oto jak to działa:

var date1 = date.getTime(); 
var date2 = data.List[0].EndDate; 

var millisecondsRemaining = dateDiff(date1, date2, 'milliseconds'); 
var secondsRemaining = dateDiff(date1, date2, 'seconds'); 
var minutesRemaining = dateDiff(date1, date2, 'minutes'); 
var hoursRemaining = dateDiff(date1, date2, 'hours'); 
var daysRemaining = dateDiff(date1, date2, 'days'); 
var weeksRemaining = dateDiff(date1, date2, 'weeks'); 
var monthsRemaining = dateDiff(date1, date2, 'months'); 
var yearsRemaining = dateDiff(date1, date2, 'years'); 

Aby użyć metody DateDiff() można po prostu zaimportować komponent.