0
votes

Obtenez tous les enregistrements d'un tableau pour le dernier mois du format AAAA-MM-DD

Comment puis-je trouver tous les objets dans le tableau [{valeur: "string", date: "yyyy-mm-dd"}] avec le dernier mois et année de cours de cours de cours? 2018-2020. Je veux quelque chose au lieu de trancher et d'égaliser.

Par exemple, j'ai obtenu: 50 articles de la propriété de la valeur et de la date. La valeur est simple prix en forme de chaîne et la date est comme "2020-02-12", "2019-12-13", "2019-04-28" et ainsi de suite. J'ai donc besoin d'obtenir toutes les valeurs du mois dernier et de les résumer. Le problème est dans la découverte du mois dernier. Le tableau est dynamique, cela signifie que j'ai eu une variation de 300 variations de la matrice, en conséquence, le mois dernier et l'année, chaque fois peut être différent.


3 commentaires

Vous pouvez convertir les valeurs de la chaîne à la date à l'aide de .filter () dans la matrice ferait le travail.


@norbitrial intéressant, je vais vérifier.


Réorganisez votre question avec des exemples appropriés et une sortie attendue. Cela vous aidera à obtenir une réponse rapide.


4 Réponses :


0
votes

Comme je l'ai mentionné dans la section Commentaires, vous pouvez convertir chaque chaîne qui a des valeurs de date avec nouvelle date () code> puis en utilisant .FILTER () CODE> sur le tableau ferait le travail.

Voir l'exemple suivant: p>

p>

const data = [{value: 'val3', date: '2017-05-06'},{value: 'val2', date: '2018-05-06'},{value: 'val1', date: '1988-05-06'},{value: 'val4', date: '2019-03-22'},{value: 'val6', date: '2019-12-24'}];

const result = data.filter(e =>
                                new Date('2018-01-01') < new Date(e.date) &&
                                new Date(e.date) < new Date('2020-01-01')
                          );

console.log(result);


0 commentaires

0
votes

Si je comprends bien, vous avez besoin de la somme de toutes les valeurs du mois dernier. Je pense que le code ci-dessous est ce dont vous avez besoin:

p>

let data = [{value: '43.21', date: '2019-07-06'},{value: '24.34', date: '2017-03-03'},{value: '54.32', date: '2020-02-03'},{value: '11.32', date: '2020-02-05'},{value: '34.23', date: '2019-11-21'},{value: '32.34', date: '2020-01-24'},{value: '32.34', date: '2020-02-21'}];

//find last newest record to get it's date
let lastdate=new Date(data.reduce(function (a, b) { return a.date > b.date ? a : b; }).date);


let result = data.reduce(function(sum, e){
			return (isNaN(parseFloat(sum))?0:parseFloat(sum))+(new Date(lastdate.getFullYear(), lastdate.getMonth(), 1) < new Date(e.date) && new Date(e.date) <= new Date(lastdate.getFullYear(), lastdate.getMonth() + 1, 0)?parseFloat(e.value):0) });

document.write("last year/month: " + lastdate.getFullYear()+"/"+(lastdate.getMonth()+1));
document.write("<br>result: "+ result);


1 commentaires

Les dates du format YYYY-MM-DD sont analysées comme UTC, vous devez donc utiliser toutes les méthodes UTC. Les réponses de code que ne sont pas utiles, vous devriez expliquer pourquoi l'OP a leur problème et la manière dont votre code le fixe.



0
votes

Compte tenu du format de date d'AAAA-MM-DD, les valeurs trieront et comparent lexiquement. Donc, d'abord trouvez le mois dernier, puis filtrez-vous pour les dates dans ce mois, par exemple

p>

let data = [
  {a:'a', date:'2020-02-12'},
  {a:'a', date:'2019-12-13'},
  {a:'a', date:'2019-04-28'},
  {a:'a', date:'2019-12-15'},
  {a:'a', date:'2020-02-28'},
  {a:'a', date:'2018-12-13'}]; 

// Get last date
let last = data.map(obj => obj.date).sort((a, b) => new Date(a) - new Date(b))[data.length-1];
console.log(last);

// Get objects in last month
let lastMonthsValues = data.filter(obj => {
  let d0 = new Date(last);
  let d1 = new Date(obj.date);
  return d1.getUTCFullYear() == d0.getUTCFullYear() &&
         d1.getUTCMonth()    == d0.getUTCMonth();
  }
);

// Last month's objects
console.log(lastMonthsValues);


0 commentaires

0
votes

Je me suis fait quelque chose comme ça:

info.incomes.sort(function(a, b) {
    return new Date(b.date)-new Date(a.date);
});
let comparison =[];
for (let i in info.incomes){    
comparison.push(info.incomes[i].date.substr(0, 7));
}
let lastmonth = 0;
for (let i in comparison){
    if (comparison[0] === comparison[i]){        
        lastmonth+=parseFloat(info.incomes[i].value);
    }      
}


0 commentaires