Hvordan trekke fra dato/tid i JavaScript?


Jeg har et felt i et rutenett som inneholder dato/tid, og jeg trenger å vite forskjellen mellom det og den nåværende dato/tid. Hva kan være den beste måten å gjøre dette på?

Datoene lagres som "2011-02-07 15:13:06".

Svar #1

Dette vil gi deg forskjellen mellom to datoer, i millisekunder

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

I ditt eksempel ville det være

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

Du må sørge for at compareDate er et gyldig Date-objekt.

Noe sånt som dette vil sannsynligvis fungere for deg

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

dvs. å gjøre "2011-02-07 15:13:06" om til new Date('2011/02/07 15:13:06'), som er et format Date-konstruktøren kan forstå.

Svar #2

Du kan bare trekke fra to datoobjekter.

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

Svar #3

Du kan bruke getTime()-metoden for å konvertere Date til antall millisekunder siden 1. januar 1970. Deretter kan du enkelt gjøre aritmetiske operasjoner med datoene. Selvfølgelig kan du konvertere tallet tilbake til Date med setTime(). Se her et eksempel.

Svar #4

Hvis du ønsker å få forskjell i klokketid, for lokal tidssone og med bevissthet om sommertid.

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;
};

Test

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);
});

Forskjellen i minutter eller sekunder er på samme måte.

Svar #5

Med mindre du trekker fra datoer på samme nettleserklient og ikke bryr deg om kanttilfeller som endringer for sommertid, har du sannsynligvis bedre av å bruke moment.js som tilbyr kraftige lokaliserte API-er. For eksempel, dette er hva jeg har i min utils.js:

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

Relaterte artikler