2011-02-09 17 views
115

Mam pole na siatce zawierającej datę/czas i potrzebuję znać różnicę między tą a bieżącą datą/czasem. Jaki może być najlepszy sposób na zrobienie tego?Jak odjąć datę/czas w javascript?

+2

Jaki jest format daty/czasu? –

+0

jest przechowywany w ten sposób "2011-02-07 15:13:06" –

+2

To nie jest duplikat. Ma inne rozwiązanie i jest wyjaśnione znacznie lepiej. Ma również lepszą pozycję w rankingu. – 3Dom

Odpowiedz

160

To daje różnicę między dwiema datami, w milisekundach

var diff = Math.abs(date1 - date2); 

W przykładzie byłoby

var diff = Math.abs(new Date() - compareDate); 

Musisz upewnić się, że compareDate jest poprawnym Date przedmiot .

Coś jak to prawdopodobnie będzie działać dla ciebie

var diff = Math.abs(new Date() - new Date(dateStr.replace(/-/g,'/'))); 

tj obracając "2011-02-07 15:13:06" do new Date('2011/02/07 15:13:06'), który jest formatem konstruktor Date może pojąć.

+1

to ignoruje obsługę DTS dla lokalnej strefy czasowej (działa dobrze z UTC) –

+0

w TypeScript Otrzymuję błąd tslint, gdy próbuję to zrobić: var diff = Math.abs (new Date() - compareDate); – Devid

21

Możesz po prostu odjąć dwa obiekty z datami.

var d1 = new Date(); //"now" 
var d2 = new Date("2011/02/01") // some date 
var diff = Math.abs(d1-d2); // difference in milliseconds 
6

getTime() można użyć metody konwersji Date liczby milisekund od 1 stycznia 1970. Następnie można łatwo wykonywać żadnych operacji arytmetycznych z datami. Oczywiście możesz przekonwertować numer z powrotem na Date z setTime(). Zobacz przykład: here.

6

Jeśli chcesz uzyskać różnicę w zegarze ściennym, lokalnej strefie czasowej i przy oświetleniu dziennym.


Date.prototype.diffDays = function (date: Date): number { 

    var utcThis = Date.UTC(this.getFullYear(), this.getMonth(), this.getDate(), this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds()); 
    var utcOther = Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()); 

    return (utcThis - utcOther)/86400000; 
}; 

testu


it('diffDays - Czech DST', function() { 
    // expect this to parse as local time 
    // with Czech calendar DST change happened 2012-03-25 02:00 
    var pre = new Date('2012/03/24 03:04:05'); 
    var post = new Date('2012/03/27 03:04:05'); 

    // regardless DST, you still wish to see 3 days 
    expect(pre.diffDays(post)).toEqual(-3); 
}); 

Diff minuty i sekundy w ten sam sposób.

10

Jeśli nie odejmujesz dat od tego samego klienta przeglądarki i nie interesują cię przypadki zbędne, takie jak zmiany czasu oszczędzania dziennego, prawdopodobnie lepiej jest użyć narzędzia moment.js, które oferuje zaawansowane zlokalizowane interfejsy API. Na przykład, to jest to, co mam w moim utils.js:

subtractDates: function(date1, date2) { 
    return moment.subtract(date1, date2).milliseconds(); 
}, 
millisecondsSince: function(dateSince) { 
    return moment().subtract(dateSince).milliseconds(); 
},