Kuinka vähentää päivämäärä/aika JavaScriptissä?


Minulla on taulukossa kenttä, joka sisältää päivämäärän/aikaan, ja minun täytyy tietää ero sen ja nykyisen päivämäärän/aikaan välillä. Mikä voisi olla paras tapa tehdä se?

Päivätiedot tallennetaan muodossa "2011-02-07 15:13:06".

Vastaus #1

Tämä antaa sinulle kahden päivämäärän välisen eron millisekunteina

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

Esimerkissäsi se olisi

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

Sinun on varmistettava, että compareDate on kelvollinen Date-objekti.

Jokin tällaista toimii sinulle luultavasti

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

esim. muuttamalla "2011-02-07 15:13:06" muotoon new Date('2011/02/07 15:13:06'), joka on muoto, jonka Date-konstruktori voi ymmärtää.

Vastaus #2

Voit vain vähentää kaksi päivämääräobjektia.

    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)

Vastaus #3

Voit käyttää getTime()-metodia muuttaaksesi Date-olion millisekunneiksi 1. tammikuuta 1970 lähtien. Sitten voit helposti tehdä mitä tahansa aritmeettisia laskutoimituksia päivämäärillä. Tietenkin voit muuntaa numeron takaisin Date-olioksi setTime()-metodilla. Katso tässä esimerkki.

Vastaus #4

Jos haluat saada eron seinäkellon ajassa, paikallisessa aikavyöhykkeessä ja kesäaikaan liittyen.

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

Testi

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

Eri minuutit tai sekunnit ovat samalla tavalla.

Vastaus #5

Ellet ole vähentämässä päivämääriä samassa selaimen asiakasohjelmassa etkä välitä reunatapauksista, kuten kesäajan muutoksista, olet todennäköisesti paremmin suojassa käyttämällä moment.js:ää, joka tarjoaa tehokkaita lokalisoituja API-rajapintoja. Esimerkiksi näin minulla on utils.js-tiedostossani:

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

Aiheeseen liittyviä artikkeleita