【问题标题】:JavaScript weekday list getJavaScript 工作日列表获取
【发布时间】:2022-01-18 05:51:56
【问题描述】:

我需要为以下要求创建一个 JavaScript 函数。我需要获取每个工作日的日期列表。如果你知道 nodeJs 包,请告诉我。感谢您的关注。

Example - 
 2022-01-03
 2022-01-04
 2022-01-05
 2022-01-06
 2022-01-07

 2022-01-10
 2022-01-11
 2022-01-12
 2022-01-13
 2022-01-14 
 ..........
 ..........
 until year-end

喜欢这种模式(仅限周一至周五)

【问题讨论】:

  • 用这个怎么样:npmjs.com/package/date-and-time
  • 添加到目前为止您尝试过的代码
  • @Najmieh Sadat Safarabadi 没关系,兄弟。但我有一个关于如何在这个包中做到这一点的问题?我认为它没有获取工作日列表的功能

标签: javascript node.js date weekday


【解决方案1】:
function getWeekDaysForYear(year) {
  const isLeap = year % 4 === 0;
  const numberOfDays = isLeap ? 366 : 365;
  let currentDate = new Date(Date.UTC(year, 0, 0, 0, 0, 0, 0));

  const weekDays = [];

  for(let i = 1; i <= numberOfDays; i++) {
    currentDate = new Date(currentDate.getTime() + 24 * 3600 * 1000);
    if (currentDate.getDay() === 0 || currentDate.getDay() === 6) {
      continue;
    }
    weekDays.push(currentDate.toISOString().split('T')[0]);
  }

  return weekDays;
}
console.log(getWeekDaysForYear(2022));

这是一个简单的函数,它以数组的形式返回指定年份的所有工作日。

【讨论】:

  • 您的闰年函数不太正确。
  • @Krushil Dhamelia 我们可以在月份范围内获得吗?例如:- 而不是年份,我们可以通过 startDate 和 endDate startDate - 2022-01-01 , endDate- 2022-01-30 那么我们可以得到高于这个条件的工作日吗?
  • 是的,请查看此日期范围的新答案
【解决方案2】:

JavaScript 的Date 对象溢出,所以你可以使用:

for (i=1;i<366;i++) {
if (i%7==1 || i%7==2) continue;
const d = new Date(2022, 0, i);
document.write(d.toDateString(),'<br>');
}

您需要注意闰年,并重新计算每年的周末。

【讨论】:

    【解决方案3】:

    类似的东西

    const endDate = new Date(2022,1,2);
    const date = new Date(); //today
    
    while (endDate > date) {
      const weekDay = date.getDay();
      if (weekDay != 6 && weekDay != 0) {
        let year = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(date);
        let month = new Intl.DateTimeFormat('en', { month: '2-digit' }).format(date);
        let day = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(date);
        console.log(`${year}-${month}-${day}`);
      }
      date.setDate(date.getDate() + 1);
    }
    

    【讨论】:

      【解决方案4】:

      既然我们在打代码高尔夫……

      function getWeekDays(year) {
        // Start on 1 Jan of given year
        let d = new Date(Date.UTC(year, 0));
        let result = [];
        do {
          // Only push dates that aren't Sat (6) or Sun (0)
          d.getDay() % 6 ? result.push(d.toLocaleDateString('en-CA')) : null;
          // Increment date
          d.setDate(d.getDate() + 1);
        // Until get to 1 Jan again
        } while (d.getMonth() + d.getDate() > 1)
        return result;
      }
      
      console.log(getWeekDays(new Date().getFullYear()))

      【讨论】:

        【解决方案5】:
        function getWeekDaysForDateRange(start, end) {
          const [startYear, startMonth, startDate] = start.split("-");
          const [endYear, endMonth, endDate] = end.split("-");
          let beginDate = new Date(Date.UTC(startYear, startMonth - 1, startDate - 1, 0, 0, 0, 0));
          let closeDate = new Date(Date.UTC(endYear, endMonth - 1, endDate, 0, 0, 0, 0));
        
          const weekDays = [];
        
          while(beginDate.getTime() !== closeDate.getTime()) {
            beginDate = new Date(beginDate.getTime() + 24 * 3600 * 1000);
            if (beginDate.getDay() === 0 || beginDate.getDay() === 6) {
              continue;
            }
            weekDays.push(beginDate.toISOString().split('T')[0]);
          }
          return weekDays;
        }
        
        console.log(getWeekDaysForDateRange('2022-01-01', '2022-01-10'));
        

        这样的东西可以根据需要适用于日期范围!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-02-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-12
          • 2010-12-07
          • 2017-03-10
          相关资源
          最近更新 更多