簡體   English   中英

以 YYYY-MM-DD 格式從數組中獲取上個月的所有記錄

[英]Get all records from an array for the last month in YYYY-MM-DD format

我如何才能找到數組[{value:"String", date:"YYYY-MM-DD"}]所有對象,當然還有最后提供的月份和年份?年份范圍是 2018-2020。 我想要一些東西而不是切片和相等。

例如,我得到: 50 個具有值和日期屬性的數組。 值是字符串格式的簡單價格,日期如“2020-02-12”、“2019-12-13”、“2019-04-28”等。 所以我需要獲取上個月的所有值並將它們相加。所以問題出在上個月的發現中。 數組是動態的,這意味着我得到了大約 300 個數組的變化,因此上個月和上年的每次都可能不同。

正如我在評論部分提到的,您可以使用new Date()轉換每個具有日期值的字符串,然后在數組上使用.filter()就可以完成這項工作。

請參閱以下示例:

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

我希望這有幫助!

據我了解,您需要上個月所有值的總和。 我認為下面的代碼是你需要的:

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

給定 YYYY-MM-DD 的日期格式,這些值將按詞法排序和比較。 所以首先找到上個月,然后過濾該月的日期,例如

 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()[data.length-1]; console.log(last); // Get objects in last month let lastMonthsValues = data.filter( obj => obj.date.substr(0,7) == last.substr(0,7) ); // Last month's objects console.log(lastMonthsValues);

您可以使用 Date 對象做同樣的事情,但這需要首先解析為 Date,然后使用date.getUTCFullYear()date.getUTCMonth()而不是簡單的字符串操作進行比較。

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

使用字符串方法的代碼要少得多,而且效率可能要高得多。

我自己做了這樣的事情:

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

我只需要總結上個月的收入,所以我只是對它們進行了排序,並檢查它們是否等於我的最后日期。 抱歉變量命名錯誤=)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM