计算工作日 Jquery
我正在使用 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;
}
I am using jquery and moment js to calculate Business Days. For some strange reasons 31 December 2022 is a Saturday but my code is still showing it as working day. I have a start Date of 30th December, 2022 and 1 (one) workDaysToAdd which falls on Saturday the 31st, December 2022 which is not working Business day. My code is not skipping the saturday 31st, December 2022.
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;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你的逻辑不正确。您从星期五开始,检查它是否是工作日(确实是)并递减
workDaysToAdd
。如果开始时是1
,那么现在是0
并且while
循环退出。将日期增量移至循环顶部,以便检查下一天。
Your logic is incorrect. You start on a Friday and check if it's a workday (it is) and decrement
workDaysToAdd
. If that started as1
, it is now0
and yourwhile
loop exits.Move your date increment to the top of the loop so you're checking the next day.