Using moment.js I'm trying to generate an array of the previous 31 days in a particular moment.js format. This is my current code:
let labels = [];
const popArray = () => {
let nowMonth: any = moment().format('D');
let newMonth = parseInt(nowMonth);
let startMonth = newMonth - 31;
for(let i = startMonth; i < newMonth; i++){
labels.push(moment().day(i).format('MM-DD'));
}
console.log(labels)
}
popArray();
When I run this code I get an array of 31 days, the first being "11-10" and the last being "12-10". Why is this? I've tried different configurations where startMonth is "-31" and newMonth is "0" but it still doesn't work.
You can simply using the subtract method like this:
let labels = [];
const popArray = () => {
for (let i = 0; i <= 31; i++){
labels.push(moment().subtract(i, "days").format('MM-DD'))
}
console.log(labels)
}
popArray();
Instead of parsing the day to an integer and looping that way, use the built-in momentjs function subtract to walk back the 31 days from the current date, then loop forward using the add function in momentjs.
const DAYS = () => {
const days = []
const dateStart = moment().subtract(31, 'days')
const dateEnd = moment()
while (dateEnd.diff(dateStart, 'days') >= 0) {
days.push(dateStart.format('MM-DD'));
dateStart.add(1, 'days')
}
return days;
}
console.log(DAYS())