【问题标题】:How to exclude weekends in date object in Javascript如何在Javascript中排除日期对象中的周末
【发布时间】:2017-09-15 03:54:46
【问题描述】:

我遇到了在 JavaScript 中排除周末日期的问题。出于我的业务需求,我想在每周的周五、周六和周日从日期对象中排除 3 天。我需要的是周五的值应该显示为周一, 周六为周二,周日为周三。我能做到。

我在这里面临的问题是,当我们运行上面的示例时,a[0] 值应该是 21-SEP-2017 但我得到的是 20-SEP-2017 并且剩余的数组值不应该改变。所以请帮我解决这个问题

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
}

【问题讨论】:

  • 酷。你试过什么?你在哪里卡住了?你熟悉 moment.js 这样的库吗?
  • 这是我的数组 var a = ["21-SEP-2017","22-SEP-2017","23-SEP-2017","24-SEP-2017","25 -SEP-2017"] 我希望输出日期为 21-SEP-2017,25-SEP-2017,26-SEP-2017,27-SEP-2017,28-SEP-2017

标签: javascript date


【解决方案1】:

您的代码似乎还没有完成:变量 noOfDaysToAddcount 从未使用过,如果使用过,它们将在循环的每次迭代中被重置,这不是目的。

您的输出显示 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);

【讨论】:

  • 如果我在输入中再添加一个日期 ["21-SEP-2017", "22-SEP-2017", "23-SEP-2017", "24-SEP-2017", "25-SEP-2017","26-SEP-2017"] 这是我得到的输出 ["21-SEP-2017", "25-SEP-2017", "26-SEP-2017", " 27-SEP-2017", "28-SEP-2017", "02-OCT-2017"] 我们需要解决的问题是没有日期在同一日期,所有日期都按顺序排列,我们需要排除周末。
  • 我不明白:您希望 29-SEP-2017 在输出中,但您还希望 "...从日期对象中排除 3 天星期五、星期六和星期日每周”。但 2017 年 9 月 29 日是星期五。你看到矛盾了吗?可以接受的第一天是下周一,即 02-OCT-2017...
猜你喜欢
  • 2015-04-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-01
  • 1970-01-01
相关资源
最近更新 更多