首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何按月显示总工作日和当前工作日javascript

如何按月显示总工作日和当前工作日javascript
EN

Stack Overflow用户
提问于 2018-06-12 07:00:44
回答 4查看 605关注 0票数 2

正在寻找一种解决方案,以显示当前工作日超过当月的总工作日。在这种情况下,工作日定义为MonTuesWed星期四星期五

我找到的最接近的解决方案是:How to find business days in current month with Javascript?

使用这篇文章的建议答案,稍微编辑一下,我如何编辑它来显示当月的当前工作日和总工作日?

这是我的CodePen尝试。

HTML:

<h3>Get workdays in current month with JavaScript</h3>
<p>Current Day: <span id="currentDay"></span></p>
<p>Total Days: <span id="totalDays"></span></p>

JS:

function isWeekday(year, month, day) {
    var day = new Date(year, month, day).getDay();
    return day !=0 && day !=6;
}
function getWeekdaysInMonth(month, year) {
    var days = daysInMonth(month, year);
    var weekdays = 0;
    for(var i=0; i< days; i++) {
        if (isWeekday(year, month, i+1)) weekdays++;
    }
    $('#totalDays').html(weekdays);
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-06-12 07:22:59

这是我的解决方案;应该是不言自明的:

const holidays = [
  [7, 4], // 4th of July
  [10, 31] // Halloween
];

var d = new Date();
var currentDay = d.getDate();
var year = d.getYear() + 1900;
var month = d.getMonth();
var total = 0;
var done = 0;
for (var day = 1; day <= 31; day++) {
  var t = new Date(year, month, day);
  if (t.getMonth() > month) break; // month has less than 31 days
  if (t.getDay() == 0 || t.getDay() == 6) continue; // no weekday
  if (holidays.some(h => h[0] - 1 === month && h[1] === day)) continue; // holiday
  total++; // increase total
  if (t.getDate() <= currentDay) done++; // increase past days
}
document.body.innerHTML = `Today is weekday ${done} of ${total}.`

循环遍历当前月份的所有日期,并对所有工作日和过去的工作日进行计数。

编辑:添加(不完整)假日数组并检查

票数 1
EN

Stack Overflow用户

发布于 2018-06-12 07:09:22

这是我的拿手好戏!

第一个位创建了一个数组,其中包含该月的每一天:

var d = new Date();
d = new Date(d.getFullYear(), d.getMonth(), 1);
var month;
function setMonth() {
  month = [];
  for (var i = 1; i < new Date(d.getFullYear(), d.getMonth(), 0).getDate()+1; i++) {
    var _d = new Date(d);
    month[i-1] = new Date(_d.setDate(_d.getDate() - _d.getDay()+i));
  }
}

setMonth();

console.log(month);

第二部分计算其中的每个工作日:

var totalWorkdays = 0;
for (var i = 0; i < month.length; i++) {
    let day = month[i].getDay();
    if (day == 1 || day == 2 || day == 3 || day == 4 || day == 5) totalWorkdays++
}
票数 1
EN

Stack Overflow用户

发布于 2018-06-16 00:23:25

我将尝试通过一步一步地解决这个问题,并使每一步都尽可能简单。

// Returns true if date is week day
function isWeekday(date) {
  const day = date.getDay();
  return day !=0 && day !=6;
}

// Get dates of all work days in one month
function getWeekdaysInMonth(month, year) {
  return getDaysInMonth(month, year).filter(isWeekday)
}

// Get dates of all days in one month 
function getDaysInMonth(month, year) {
  const firstDay = new Date(year, month, 1);
  const lastDay = new Date(year, month + 1, 0);
  
  return getDaysInRange(firstDay, lastDay);
}

// Get dates between 2 dates
function getDaysInRange(start, end) {
  const r = [];
  for(let dt = start; dt <= end; dt.setDate(dt.getDate() + 1)) {
      r.push(new Date(dt));
  }
  return r;
}

console.log(getWeekdaysInMonth(0, 2018)); // Get workdays for JAN 2018

希望这有助于使推理变得更容易!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50807164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档