Estoy dispuesto a crear una fecha recurrente basada en el "enésimo día de la semana del mes" Aquí está mi solución cuando selecciono la fecha actual
let dates = {};
const currentDate = dayjs();
const recurrence = currentDate
.recur(dayjs().add(4, "month"))
.every("Wednesday")
.daysOfWeek()
.every(currentDate.monthWeekByDay())
.weeksOfMonthByDay();
recurrence.all().forEach((date) => {
dates[date.format("YYYY-MM-DD")] = { selected: true, };
});
// dates = ["2022-09-21","2022-10-19","2022-11-16","2022-12-21","2023-01-18"]
pero si pones ultimo dia de este mes que es 30
let dates = {};
const lastDayofMonth = dayjs().endOf("month");
const recurrence = lastDayofMonth
.recur(dayjs().add(4, "month"))
.every("Friday")
.daysOfWeek()
.every(lastDayofMonth.monthWeekByDay())
.weeksOfMonthByDay();
estaba esperando conseguir
["2022-09-30","2022-10-28","2022-11-25","2022-12-30"..]
en vez de
["2022-09-30","2022-12-30"]
Aquí estála demostración
¿Me estoy perdiendo algo? Gracias de antemano
Es posible crear una fecha recurrente basada en el "enésimo día de la semana del mes" con dayjs y dayjs-recur como todos los meses como un número diferente de semanas
Pero hay algunos desafíos:
Para resolver esto
Manifestación
A continuación se muestra un enlace a una demostración de trabajo bifurcada de la demostración de @Achraf en el código sandbox
Ejemplo de código
const lastDayofMonth = dayjs().endOf("month");
const recurrence = lastDayofMonth
.recur(dayjs().add(4, "month"))
.every("Friday")
.daysOfWeek()
.every([3, 4])
.weeksOfMonthByDay();
// filter recurrence
const months = {};
recurrence.all().forEach((date) => {
months[date.month()] = date;
})
// get filtered dates
const filteredDates = Object.values(months);
// formot date into dates object
filteredDates.forEach((date) => {
dates[date.format("YYYY-MM-DD")] = { selected: true, color: "#2FB0ED" };
});
console.log("dates", dates);
// ["2022-09-30","2022-10-28","2022-11-25","2022-12-30"..]