gpt4 book ai didi

javascript - 如何获取使用 NodeJS 给出的两个特定日期之间的天数、周数和月数?

转载 作者:行者123 更新时间:2023-11-30 14:15:03 24 4
gpt4 key购买 nike

我正在开发一个贷款管理系统,后端使用 NodeJS,前端使用 AngularJS。这就是我需要做的。

系统中有3个类别。

  1. 日常贷款
  2. 每周贷款
  3. 每月贷款

贷款金额为 5000 美元,这是一笔每周贷款。这意味着客户需要每周支付这笔贷款。

开始日期为2018-12-11(2018年12月11日)

结束日期为2019-05-11(2019年4月11日)

利率为 8%

我想要做的是,找到开始日期和结束日期之间的所有星期。而且今天是星期二,并且在每周的每个星期二,客户都需要付款。所以我需要在添加新贷款时保存该还款 list 。

只是我想从 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-businessmoment-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');
}

关于javascript - 如何获取使用 NodeJS 给出的两个特定日期之间的天数、周数和月数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53722697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com