304 Stimmen

Javascript - Array von Daten zwischen 2 Daten erhalten

var range = getDates(new Date(), new Date().addDays(7));

Ich möchte, dass "range" ein Array von Datumsobjekten ist, eines für jeden Tag zwischen den beiden Daten.

Der Trick dabei ist, dass auch Monats- und Jahresgrenzen berücksichtigt werden sollten.

248voto

John Hartsock Punkte 82122
Date.prototype.addDays = function(days) {
    var date = new Date(this.valueOf());
    date.setDate(date.getDate() + days);
    return date;
}

function getDates(startDate, stopDate) {
    var dateArray = new Array();
    var currentDate = startDate;
    while (currentDate <= stopDate) {
        dateArray.push(new Date (currentDate));
        currentDate = currentDate.addDays(1);
    }
    return dateArray;
}

Hier ist eine funktionelle Demo http://jsfiddle.net/jfhartsock/cM3ZU/

154voto

enesn Punkte 1655

Ich habe mir alle oben genannten angesehen. Am Ende habe ich selbst geschrieben. Sie benötigen hierfür kein Momentjs . Eine native for-Schleife ist ausreichend und macht am meisten Sinn, weil eine for-Schleife zum Zählen von Werten in einem Bereich existiert.

One Liner:

var getDaysArray = function(s,e) {for(var a=[],d=new Date(s);d<=new Date(e);d.setDate(d.getDate()+1)){ a.push(new Date(d));}return a;};

Lange Version

var getDaysArray = function(start, end) {
    for(var arr=[],dt=new Date(start); dt<=new Date(end); dt.setDate(dt.getDate()+1)){
        arr.push(new Date(dt));
    }
    return arr;
};

Listen Sie dazwischen liegende Daten auf:

var daylist = getDaysArray(new Date("2018-05-01"),new Date("2018-07-01"));
daylist.map((v)=>v.toISOString().slice(0,10)).join("")
/*
Output: 
    "2018-05-01
    2018-05-02
    2018-05-03
    ...
    2018-06-30
    2018-07-01"
*/

Tage von einem vergangenen Datum bis heute:

var daylist = getDaysArray(new Date("2018-05-01"),new Date());
daylist.map((v)=>v.toISOString().slice(0,10)).join("")

78voto

Mohammed Safeer Punkte 19013

Versuchen Sie dies und vergessen Sie nicht, moment js einzuschließen,

function getDates(startDate, stopDate) {
    var dateArray = [];
    var currentDate = moment(startDate);
    var stopDate = moment(stopDate);
    while (currentDate <= stopDate) {
        dateArray.push( moment(currentDate).format('YYYY-MM-DD') )
        currentDate = moment(currentDate).add(1, 'days');
    }
    return dateArray;
}

31voto

stekhn Punkte 1639

Ich hatte Schwierigkeiten, die oben genannten Antworten zu verwenden. In den Datumsbereichen fehlten einzelne Tage aufgrund der Zeitzonenverschiebung, die durch die lokale Sommerzeit verursacht wurde. Ich habe eine Version mit UTC-Daten implementiert, die dieses Problem behebt:

function dateRange(startDate, endDate, steps = 1) {
  const dateArray = [];
  let currentDate = new Date(startDate);

  while (currentDate <= new Date(endDate)) {
    dateArray.push(new Date(currentDate));
    // Use UTC date to prevent problems with time zones and DST
    currentDate.setUTCDate(currentDate.getUTCDate() + steps);
  }

  return dateArray;
}

const dates = dateRange('2020-09-27', '2020-10-28');
console.log(dates);

Hinweis : Ob eine bestimmte Zeitzone oder die Sommerzeit angewendet wird, hängt ganz von Ihrem Standort . Dies zu überschreiben ist im Allgemeinen keine gute Idee. Verwendung von UTC-Daten entschärft die meisten zeitbedingten Probleme.

Bonus : Sie können das Zeitintervall, für das Sie Zeitstempel erstellen möchten, mit der optionalen Option steps Parameter. Wenn Sie wöchentliche Zeitstempel setzen wollen steps a 7 .

30voto

Ahmed Aswani Punkte 7671

Ich benutze moment.js y Twix.js sie bieten eine sehr gute Unterstützung für die Manipulation von Datum und Uhrzeit

var itr = moment.twix(new Date('2012-01-15'),new Date('2012-01-20')).iterate("days");
var range=[];
while(itr.hasNext()){
    range.push(itr.next().toDate())
}
console.log(range);

Ich habe dies auf http://jsfiddle.net/Lkzg1bxb/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X