Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用moment.js和moment business days计算公共假日和周末的日期_Javascript_Date_Momentjs_Moment Business Days - Fatal编程技术网

Javascript 使用moment.js和moment business days计算公共假日和周末的日期

Javascript 使用moment.js和moment business days计算公共假日和周末的日期,javascript,date,momentjs,moment-business-days,Javascript,Date,Momentjs,Moment Business Days,此应用程序的目的始终是显示每月的第16个工作日(表示考虑了工作日和公共假日) 为此,我使用了moment business days,这是一个moment.js插件。它计算日期并考虑工作日和(预先配置的)公共假日。我使用它如下,对于一些日期,它给了我正确的结果,但对于其中一些日期,它不是。我看不出代码中的错误: myHolidays=[ {holidayDate:“2020-06-01”,描述:“holiday 1”}, {holidayDate:“2020-06-02”,描述:“holida

此应用程序的目的始终是显示每月的第16个工作日(表示考虑了工作日和公共假日)

为此,我使用了
moment business days
,这是一个
moment.js
插件。它计算日期并考虑工作日和(预先配置的)公共假日。我使用它如下,对于一些日期,它给了我正确的结果,但对于其中一些日期,它不是。我看不出代码中的错误:

myHolidays=[
{holidayDate:“2020-06-01”,描述:“holiday 1”},
{holidayDate:“2020-06-02”,描述:“holiday 2”},
{holidayDate:“2020-06-03”,描述:“holiday 3”},
{度假日期:“2020-06-06”,描述:“周末周六”},
{holidayDate:“2020-06-07”,描述:“周末-周日”},
{holidayDate:“2020-06-11”,描述:“holiday 6”},
{度假日期:“2020-06-13”,描述:“周末周六”},
{holidayDate:“2020-06-14”,描述:“周末-周日”},
{度假日期:“2020-06-20”,描述:“周末周六”},
{holidayDate:“2020-06-21”,描述:“周末-周日”},
{度假日期:“2020-06-27”,描述:“周末周六”},
{holidayDate:“2020-06-28”,描述:“周末-周日”},
];
时刻更新刻度('de'{
假日:myHolidays.map(i=>i.holidayDate),
holidayFormat:'YYYY-MM-DD'
});
var startDate=时刻(“2020-01-01”)。startOf(“月”)
var endDate=时刻(“2020-12-01”)
var每个月16=[];
函数generate16InEachMonth(){
让monthsList=[]
//按月循环
而(结束日期>开始日期){
monthList.push(新日期(时刻(this.startDate).businessAdd(15,'days'))
startDate=startDate.add(1,“月”).startOf(“月”)
}
返回月份列表
}
console.log(generate16InEachMonth())
.as控制台包装{top:0;最大高度:100%!重要;}

该代码无法在所有月份都工作的原因是,默认情况下,每月的第一天被计为工作日

区分第一天是否为工作日的条件应足够(如果第一天本身不是工作日,则增加16个工作日)


你是如何在6月份获得26个预期工作日的?嘿,baermathias,你仍然有这个问题吗?我运行了你的代码,只有一个日期与目标日期不同。这是我的控制台:
“2020-01-22”、“2020-02-21”、“2020-03-20”、“2020-04-22”、“2020-05-22”、“2020-06-25”、“2020-07-22”…
function generate16InEachMonth() {
  let monthsList = []
  // loop by months
  while (endDate > startDate) {
    var daysToAdd = (startDate.isBusinessDay()) ? 15 : 16
    monthsList.push(new Date(moment(this.startDate).businessAdd(daysToAdd, 'days')))
    startDate = startDate.add(1, "month").startOf('month')
  }
  return monthsList
}