gpt4 book ai didi

javascript - 如何获取开始日期和结束日期之间的日期? (不包括周末日期)

转载 作者:行者123 更新时间:2023-11-29 09:59:46 25 4
gpt4 key购买 nike

您好,想要获取开始日期和结束日期之间的日期列表。例如,开始日期是 27-08-2010,结束日期是 31-08-2010。所以日期列表是 27-08-2010、30-08-2010 和 31-08-2010。 29-08-2010 和 30-08-2010 将被忽略,因为它是在周末。我附上图片以获得更清晰的解释。如何使用 javascript 或 jquery 实现这一点?我只想获取日期列表,因为工作日计算已经完成。

alt text

最佳答案

首先,我们可以在日期选择器中禁用假期和周末,因为我们将在每个日期选择器组件中像这样设置它:

从 DatePicker 禁用周末和假期

var disabledDays = ["10-22-2010","8-16-2010"];
$("#startDate").datepicker({
constrainInput: true,
beforeShowDay: noWeekendsOrHolidays
});

function nationalDays(date) {
var m = date.getMonth(), d = date.getDate(), y = date.getFullYear();
for (i = 0; i < disabledDays.length; i++) {
if($.inArray((m+1) + '-' + d + '-' + y,disabledDays) != -1 || new Date() > date) {
return [false];
}
}
return [true];
}
function noWeekendsOrHolidays(date) {
var noWeekend = jQuery.datepicker.noWeekends(date);
return noWeekend[0] ? nationalDays(date) : noWeekend;
}

现在我们已经有了不允许用户选择周末或假期作为开始日期或结束日期的行为,我们继续计算这些日期之间的总天数:

计算两个日期之间的营业日期

作为Find day difference between two dates (excluding weekend days)我们有这个函数来计算日期之间的工作日:

function calcBusinessDays(dDate1, dDate2) { // input given as Date objects
var iWeeks, iDateDiff, iAdjust = 0;
if (dDate2 < dDate1) return -1; // error code if dates transposed
var iWeekday1 = dDate1.getDay(); // day of week
var iWeekday2 = dDate2.getDay();
iWeekday1 = (iWeekday1 == 0) ? 7 : iWeekday1; // change Sunday from 0 to 7
iWeekday2 = (iWeekday2 == 0) ? 7 : iWeekday2;
if ((iWeekday1 > 5) && (iWeekday2 > 5)) iAdjust = 1; // adjustment if both days on weekend
iWeekday1 = (iWeekday1 > 5) ? 5 : iWeekday1; // only count weekdays
iWeekday2 = (iWeekday2 > 5) ? 5 : iWeekday2;

// calculate differnece in weeks (1000mS * 60sec * 60min * 24hrs * 7 days = 604800000)
iWeeks = Math.floor((dDate2.getTime() - dDate1.getTime()) / 604800000)

if (iWeekday1 <= iWeekday2) {
iDateDiff = (iWeeks * 5) + (iWeekday2 - iWeekday1)
} else {
iDateDiff = ((iWeeks + 1) * 5) - (iWeekday1 - iWeekday2)
}

iDateDiff -= iAdjust // take into account both days on weekend

return (iDateDiff + 1); // add 1 because dates are inclusive
}

假期倒计时

我现在很着急,你现在需要做的是 --iDateDiff (就在返回之前)对于 disabledDays 之间的每个日期dDate1dDate2

您将如何实现?...您将遍历 disabledDays 数组并将其转换/解析 为 Date 对象并计算如下:

var holiDay = Date.parse(iteratedDate);
if((holiDay >= dDate1 && holiDay <= dDate2)) {
--iDateDiff
}

希望我对你有帮助...


编辑:

对不起,误解了这个问题,试试这个:

var Weekday = new Array("Sun","Mon","Tue","Wed","Thuy","Fri","Sat");
while (startDate<=endDate)
{
var weekDay = startDate.getDay();
if (weekDay < 6 && weekDay > 0) {
var month = startDate.getMonth()+1;
if( month <= 9 ) { month = "0"+month; }
var day = startDate.getDate();
if( day <= 9 ) { day = "0"+day; }
document.write(day+"/"+month+"/"+startDate.getFullYear() + " ("+Weekday[weekDay]+")<br />");
}
startDate.setDate(startDate.getDate()+1)

}

直播 DEMO

关于javascript - 如何获取开始日期和结束日期之间的日期? (不包括周末日期),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3571863/

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