javascript - 如何获取使用 NodeJS 给出的两个特定日期之间的天数、周数和月数?
问题描述
我正在开发一个贷款管理系统,后端使用 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
这个,但仍然没有办法循环所有日期。
解决方案
您可以moment
在 NodeJS 中使用模块。
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');
}
推荐阅读
- ios - 调整 Google Maps Swift 4 的大小
- javascript - 使用 JavaScript 更改范围输入样式
- python - 使用 OpenCV 和多线程处理多个相机
- heroku - 从 Heroku Hobby 升级到标准和追溯 Postgres DB 回滚可能吗?
- javafx - JavaFX:TextField 中的文本对齐错误
- java - 从 ArrayDeque 中找到一个项目并在 Java 中将其推送到最后
- .net - 无法象征 Xamarin Android 堆栈跟踪
- java - spring data mongorepository.save E11000 有时重复键错误索引
- data-structures - 具有删除 o(1) 和随机访问 o(1) 的数据结构
- java - 单击后更改鼠标位置