我正在开发一个贷款管理系统,使用NodeJS作为后端,而AngularJS作为前端。简单地,这就是我需要做的。
系统中有3个类别。
贷款金额为$5000
,这是Weekly loan
。这意味着客户需要每周偿还这笔贷款。
开始日期是2018-12-11(2018年12月11日)
结束日期为2019-05-11(2019年4月11日)
利率为8%
。
我想做的是,找到开始日期和结束日期之间的所有星期。 今天也是星期二,每周的每个星期二,客户都需要付款。因此,在添加新贷款时,我需要保存该还款清单。
我想算一下从2018-12-11到2019-05-11的7天。特别是我们需要跳过假期。它被保存在系统中。在计算日期时,我们可以从假期列表中检查日期并跳过它们。
这是我想要的示例输出:
日期:2018-12-11,金额:$ xx
日期:2018-12-18,金额:$ xx
日期:2018-12-25,金额:$ xx
日期:2019-01-01,金额:$ xx
日期:2019-01-08,金额:$ xx
日期:2019-01-15,金额:$ xx 。 。 。
我已经尝试了很多的东西。
我尝试使用https://momentjs.com/
并尝试获得像这样的几周时间:
moment().add(10, 'days').calendar();
->由此,我们可以添加所有日期并获得10天后的日期。
我也为此使用了https://github.com/datejs/Datejs
,但仍然无法循环显示所有日期。
答案 0 :(得分:2)
您可以在NodeJS中使用moment
模块。
npm i moment
它具有来自文档的功能.diff
:
//moment().diff(Moment|String|Number|Date|Array);
//moment().diff(Moment|String|Number|Date|Array, String);
//moment().diff(Moment|String|Number|Date|Array, String, Boolean);
var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b, 'days') // 1
编辑:
因此,基本上,您希望+7天(不包括节假日)。
下面是一个非常基本的基于循环的解决方案。但是有些图书馆正在做您想要的事情。
const start = moment().startOf('day');
const end = moment(somedate).startOf('day');
let current = start;
const holidayList = [[2018, 11, 25]]
while(current.isSameOrBefore(end)){
let nextWeek = moment(current).add(7, 'days');
//check if holidays are between nextWeek and current
//get number of holidays
const number_of_holidays = holidayList.reduce((p,c)=>{
if(moment(c).isAfter(current) && moment(c).isSameOrBefore(nextWeek)){
return p+1;
}
return p;
},0)
nextWeek = nextWeek.add(number_of_holidays, 'days')
//do something
console.log('---'+nextWeek.toDate());
current = nextWeek;
}
您可以结帐momentjs-business或moment-weekday-calc。
编辑2:从github问题中,我看到您只需要星期二,没有假期。
const end = moment(endDate).startOf('day');
const holidayList = [[2018, 11, 25]]
const dayINeed = 2; //for tuesday
let current = moment().isoWeekday();
if (current <= dayINeed) {
current = moment().isoWeekday(dayINeed).startOf('day');
} else {
current = moment().add(1, 'weeks').isoWeekday(dayINeed).startOf('day');
}
while(current.isSameOrBefore(end)){
/* HERE check for holiday */
console.log(current.toArray());
current.add(1, 'weeks');
}