我正在使用 jquery 和 moment js 來計算作業日。由于一些奇怪的原因,2022 年 12 月 31 日是星期六,但我的代碼仍將其顯示為作業日。我的開始日期是 2022 年 12 月 30 日和 1(一個)workDaysToAdd,它位于 2022 年 12 月 31 日星期六,這不是作業日。我的代碼沒有跳過 2022 年 12 月 31 日星期六。
function AddBusinessDays(startDate, workDaysToAdd) {
var curDate = new Date(startDate);
var realDaysToAdd = 0;
while (workDaysToAdd > 0) {
realDaysToAdd ;
if (IsWorkDay(curDate)) {
workDaysToAdd--;
}
curDate.setDate(curDate.getDate() 1);
}
return realDaysToAdd;
}
function IsWorkDay(date) {
var curDate = new Date(date);
var dayOfWeek = curDate.getDay();
var isWorkDay;
if (dayOfWeek == 0 || dayOfWeek == 6) {
isWorkDay = false;
}
else {
isWorkDay = !isNationalDay(curDate);
}
return isWorkDay;
}
function isNationalDay(date) {
var thisDate = new Date(date);
var thisMoment = moment(thisDate);
var holiday = thisMoment.holiday();
var isHoliday = holiday != 'undefined' && holiday != null && holiday.length > 0;
return isHoliday;
}
uj5u.com熱心網友回復:
你的邏輯不正確。您從星期五開始并檢查它是否是作業日(它是)和 decrement workDaysToAdd。如果以 開頭1,則現在是0,并且您的while回圈退出。
將您的日期增量移動到回圈的頂部,以便您在第二天檢查。
function AddBusinessDays(startDate, workDaysToAdd) {
const curDate = new Date(startDate);
let realDaysToAdd = 0;
while (workDaysToAdd > 0) {
curDate.setDate(curDate.getDate() 1); // move this to the top of the loop
realDaysToAdd ;
if (IsWorkDay(curDate)) {
workDaysToAdd--;
}
}
return realDaysToAdd;
}
function IsWorkDay(date) {
return date.getDay() % 6 && !isNationalDay(date);
}
function isNationalDay(date) {
return false; // no idea where the moment.holiday() comes from
}
const startDate = new Date(Date.UTC(2022, 11, 30));
console.log("start", startDate);
console.info(AddBusinessDays(startDate, 1))
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/448317.html
上一篇:MVC視圖資料不會在jQueryPost上更新,但會在表單提交按鈕單擊時更新
下一篇:如何獲得此警報以停止回圈?
