我们需要什么:
示例客户的开始日期是2019年3月11日-28个工作日等于4月18日,4月18日成为第1个月的结束日期,第2个月的开始日期是4月18日(第1个月的结束日期+ 1),等于19日4月,然后第2个月的结束日期是+28个工作日,以此类推,在接下来的12个月中,我们需要结束日期和开始日期。
我们也可以使用它,以便仅显示日期而不是在日期结束时显示(时间和绿色)
到目前为止,我有一个可以工作的简单js 28个工作日脚本...但是我不知道该怎么做,我尝试用html抓取元素并重新执行脚本,但是没有按计划工作。
愿有人帮助解决这一难题。非常感谢。
var startDate = "2019-03-11";
startDate = new Date(startDate.replace(/-/g, "/"));
var endDate = "", noOfDaysToAdd = 28, count = 0;
while(count < noOfDaysToAdd){
endDate = new Date(startDate.setDate(startDate.getDate() + 1));
if(endDate.getDay() != 0 && endDate.getDay() != 6){
count++;
}
}
document.getElementById("month1end").value = endDate;
答案 0 :(得分:1)
这是您的方法。请注意,要获得28个工作日的“月”的最后一天,您需要在第一天(而不是28)增加27个工作日。加28将给您下个月的第一天。
我建议使用将给定日期(对象)增加多个工作日的函数。这将确保结果是一个工作日。因此,即使您添加0天,它也可能会更改日期(当它是周末时)。
这里是函数,以及生成12个月的附加代码,还支持银行假期。只需在第一个任务中定义它们:
const bankHolidays = new Set([
Date.parse("April, 19 2019"),
Date.parse("April, 22 2019")
]);
function addWorkingDays(date, days) {
function workingDay(date) {
while (true) {
let day = (date.getDay() + 1) % 7;
if (day < 2) date.setDate(date.getDate() + 2 - day);
if (!bankHolidays.has(date.getTime())) break;
date.setDate(date.getDate()+1);
}
}
workingDay(date);
while(days--) {
date.setDate(date.getDate() + 1);
workingDay(date);
}
return date;
}
document.querySelector("button").addEventListener("click", function() {
const dateStr = document.querySelector("#startdate").value.replace(/-/g, "/");
const date = new Date(dateStr);
addWorkingDays(date, 0); // Make sure it is a working day
const td = document.querySelectorAll("td");
for (let i = 0; i < 12; i++) {
td[i*2].textContent = date.toDateString();
td[i*2+1].textContent = addWorkingDays(date, 27).toDateString();
addWorkingDays(date, 1);
}
});
table, tr, td, th {
border: 1px solid;
border-collapse: collapse;
}
<label>Start date: <input id="startdate"></label>
<button>Generate months</button>
<table>
<tr><th>start</th><th>end</th></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
</table>
答案 1 :(得分:0)
由于该日期可以通过将其签名为变量而转换为毫安,因此您只需以毫秒为单位添加一天,就可以得到“ 4月19日”,或尝试使用endDate.setDate(endDate.getDate() + 1)
-也可以使用我认为。
如果要在12个月内自动执行此操作,只需将代码放入循环中,并在每次迭代后更改开始日期即可。
希望我能帮上忙。