嗨,伙计们,我已经实现了以下每周和每两周,但我需要实现它每月使用momentjs低于具体要求
可能的支付频率有:●每周每月-每月同一天(如3月5日,4月5日,5月5日)对于每月频率,如果某个行项目的开始日期在某些月份不存在,则我们需要在当月最近的一天支付下一笔款项。例如,租赁8月31日开始每月付款的,不能有下一个9月31日付款,因为9月31日不存在。因此我们将下一笔付款是在9月30日,之后的付款是在31日10月,恢复到原来的日期
您可以使用moment().endOf(String)
来检查当前月份的最后一天,参见docs https://momentjs.com/docs/#/manipulating/end-of/
也检查这个答案Moment JS给定月份的开始和结束
您也可以使用普通JavaScript获得每个月的付款日,通过创建一个Date
对象,其monthIndex为所需的monthIndex + 1,如果该月的天数少于付款日,则该月的天数为0。
我们可以使用Array.from()
和Array.map()
来创建一个租赁付款日期数组:
// Get the number of days in a given month...
function getDaysInMonth (year, month) {
return new Date(year, month, 0).getDate();
}
// Create an array of the dates in question
function getPaymentDates(startYear, startMonth, dayOfMonth, termMonths) {
return Array.from({ length: termMonths }, (v, monthOffset) => {
const daysInMonth = getDaysInMonth(startYear, startMonth + monthOffset);
if (dayOfMonth <= daysInMonth) {
return new Date(startYear, startMonth + monthOffset - 1, dayOfMonth)
} else {
// Return the last day of the month
return new Date(startYear, startMonth + monthOffset, 0)
}
});
}
// Log the dates in a convenient format
const options = { year: 'numeric', month: 'numeric', day: 'numeric' }
// Test with some different payment days...
const days = [1,15,30,31];
for(let dom of days) {
console.log(`Payment dates (DOM = ${dom}):`, getPaymentDates(2021, 8, dom, 12).map(d => d.toLocaleDateString([], options)))
}