Как найти выходные в массиве дат в javascript

У меня есть массив дат, и я хочу сделать с ним две вещи.

1.- Скажите, сколько дат в нем выходных? 2.- Создайте новую договоренность с датами, выходными

Я попробовал следующий код, но я не знаю, как вернуться, когда выходные истинны, поскольку вы можете видеть, что код оценивает только, когда getDay равен 0 (воскресенье) и 6 (суббота), мне нужно было бы найти способ поставить те, которые верны внутри массива

const attendanceDates = [
  "2022-11-21",
  "2022-11-22",
  "2022-11-24",
  "2022-11-26"
]

const whenIsWeekend = [];
attendanceDates.forEach(element => {

  const date = new Date(element)
  var dayOfWeek = date.getUTCDay();
  var isWeekend = (dayOfWeek === 6) || (dayOfWeek === 0); // 6 = Saturday, 0 = Sunday
  console.info('isWeekend', isWeekend);
  if (isWeekend) {
    whenIsWeekend.push(element)
  }
})


console.info('array of Weekend', whenIsWeekend)

console.info('count weekends', whenIsWeekend.length)

Что я надеюсь вернуть

array of Weekend [
   "2022-11-26"
]
count weekends 1

Спасибо заранее

Я что-то упустил, ваш код уже возвращает то, что вы сказали, и ожидаете, что он вернется?

Aleksandar 25.11.2022 16:37

Я немного смущен, потому что ваш код работает. Единственная проблема связана с часовыми поясами, поскольку ваш массив whenIsWeekend может возвращать неправильный день в зависимости от часового пояса пользователя. Но это легко исправить, используя .getUTCDay() вместо .getDay().

EssXTee 25.11.2022 16:37

Это то, что он возвращает день «2022-11-21», и этого не должно быть, потому что дата 21 не является выходным днем ​​​​в договоренности, выходные - 2022-11-26, что бы он оценивал на "6" с getDay, поэтому меня смущает поведение

Izlia 25.11.2022 16:40

@Izlia Использование .getUTCDay() решает эту проблему. Также вам, вероятно, следует использовать .forEach() вместо .map(). Обычно вы используете карту только для изменения массива, но в этом случае вы просто перебираете его и добавляете значения в отдельный массив.

EssXTee 25.11.2022 16:42

Да! Вот и все! Я не знал, что часовой пояс может быть затронут. Управление датами - это головная боль для меня, спасибо и извините за неудобства!

Izlia 25.11.2022 16:48
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
81
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Использование собственного объекта даты Javascript:

const attendanceDates = [
  "2022-11-21",
  "2022-11-22",
  "2022-11-24",
  "2022-11-26"
]

const weekends = attendanceDates.filter(date => {
    const dateObj = new Date(date)
    const dayOfWeek = dateObj.getUTCDay();

    if (dayOfWeek == 0 || dayOfWeek == 6) {
        return true;
    }
})

console.info(weekends) //["2022-11-26"]

Использование библиотеки moment.js (идеально, если вам нужно легко выполнять множество манипуляций с датами)

const attendanceDates = [
  "2022-11-21",
  "2022-11-22",
  "2022-11-24",
  "2022-11-26"
]

const weekends = attendanceDates.filter(date => {
    const dateMoment = moment(date)
    if (dateMoment.day() == 0 || dateMoment.day() == 6) {
        return true;
    }
})

console.info(weekends) //["2022-11-26"]

Идеальный! Это все, спасибо! Я не знал, что часовой пояс может вызвать проблемы при проведении тура, и это была моя ошибка.

Izlia 25.11.2022 16:46

Другие вопросы по теме