Мне нужно создать функцию 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

Как эта схема (только с понедельника по пятницу)

0
Niranga 18 Янв 2022 в 08:51
Как насчет этого: npmjs.com/package/date-and-time
 – 
Najmieh Sadat Safarabadi
18 Янв 2022 в 09:07
Добавьте код, который вы пробовали до сих пор
 – 
Rahul Kumar
18 Янв 2022 в 09:34
Садат Сафарабади Все в порядке, братан. Но у меня есть вопрос о том, как это сделать в этом пакете? Я думаю, что у него нет функции для получения списка дней недели
 – 
Niranga
18 Янв 2022 в 10:00

4 ответа

Лучший ответ
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));

Это простая функция, которая возвращает все дни недели для указанного года в виде массива.

1
Krushil Dhamelia 18 Янв 2022 в 09:17
1
Ваша функция високосного года не совсем верна.
 – 
kevinSpaceyIsKeyserSöze
18 Янв 2022 в 09:23
Спасибо все правильно и работает.
 – 
Niranga
18 Янв 2022 в 09:52

Объект 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>');
}

Вам нужно будет следить за високосными годами и пересчитывать, какие дни являются выходными каждый год.

0
JMP 18 Янв 2022 в 09:16
Спасибо все правильно и работает.
 – 
Niranga
18 Янв 2022 в 09:52

Что-то вроде этого

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);
}
0
javiyu 18 Янв 2022 в 09:17

Поскольку мы играем в кодовый гольф…

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(2022))
0
RobG 18 Янв 2022 в 10:54