我面临着在JavaScript中排除周末日期的问题。对于我的业务需求,我想在每周的星期五,星期六和星期日从日期对象中排除3天。我需要的是星期五的值应该显示周一,周六周二,周日周三。我能做到这一点。
我在这里遇到的问题是,当我们运行上面的示例时,a [0]值应该是2017年9月21日,但是我将在2017年9月20日之前获得剩余的数组值没变。所以请帮我解决这个问题
var a = ["21-SEP-2017", "22-SEP-2017", "23-SEP-2017", "24-SEP-2017", "25-SEP-2017"];
for (i = 0; i < a.length; i++) {
var startDate = a[i];
startDate = new Date(startDate.replace(/-/g, "/"));
var endDate = "",
noOfDaysToAdd = 1;
var count = 0;
endDate = new Date(startDate.setDate(startDate.getDate()));
if (startDate.getDay() != 0 && startDate.getDay() != 5 && startDate.getDay() != 6) {
endDate = new Date(startDate.setDate(startDate.getDate() + i - 1));
} else {
startDate.setDate(startDate.getDate() + 3)
endDate = new Date(startDate.setDate(startDate.getDate()));
}
console.log(endDate); //You can format this date as per your requirement
}
答案 0 :(得分:0)
您的代码似乎没有完成:变量noOfDaysToAdd
和count
从未使用过,如果是,它们将在循环的每次迭代中重置,这不是目的。
您的输出显示9月20日是因为您没有输出日期的字符串化版本,但日期对象本身,然后console.log
将日期显示为UTC日期(注意时间部分匹配日期时区差异)。而是使用.toString()
或其他方式将日期转换为本地化字符串。
以下是如何做到这一点:
function toDate(s) {
return new Date(s.replace(/-/g, '/'));
}
function toStr(dt) {
var months = ["JAN","FEB","MAR","APR","MAY","JUN",
"JUL","AUG","SEP","OCT","NOV","DEC"];
return [('0'+dt.getDate()).substr(-2), months[dt.getMonth()], dt.getFullYear()]
.join('-');
}
var a = ["21-SEP-2017", "22-SEP-2017", "23-SEP-2017", "24-SEP-2017", "25-SEP-2017"],
add = 0;
var result = a.map(toDate).map(dt => {
dt.setDate(dt.getDate()+add);
var move = [0, 6, 5].indexOf(dt.getDay()) + 1;
if (move) {
add += move;
dt.setDate(dt.getDate()+move);
}
return dt;
}).map(toStr);
console.log(result);