JS цикл ставит неверное значение

У меня есть функция создающая 14 дней от 'сегодня' и пушащия их в option для select. Пытаюсь реализовать заполнение значение value: 0 - воскресенье, 1 - сегодня, 2 - остальные дни. Моя функция ставит по итогу всем единицы так как сравнивает значение getDate() только на сегодня, а не на каждый день - не доходят мозги как надо изменть цикл for и проверку в нем:

function getDates(node) {
  let test = new Date()
  let testNow = test.getTime()
  let testDayNow = Number(test.getDay())
  let f = 0
  let data = []
  data.push(test)
  for (let i = 0; i < 14; i++) {
    let para = document.createElement("option");
    console.log(f)
    let curData = new Date(testNow + f * 3600 * 1000)
    let formatedDate = curData.toLocaleDateString('ru-RU', {
      month: 'long',
      day: 'numeric'
    })
    f = f + 24
    para.innerHTML = formatedDate
    para.value = i
    if (test.getDay() == 0) {
      para.value = 0
      console.log(para.value)
    } else if (testDayNow == test.getDay()) {
      para.value = 1
      console.log(para.value)
    } else {
      para.value = 2
      console.log(para.value)
    }
    node.appendChild(para)
  }
  console.log(data)
}

getDates(document.getElementById('t'));
<div id="t"></div>


Ответы (2 шт):

Автор решения: SwaD

Вы в начале функции определили переменную test, затем переменной testDayNow присвоили значение Number(test.getDay()) и дальше в цикле сравнивали эти значения друг с другом, они естественно всегда равны.
Переменную testDayNow вы нигде в цикле не переопределяли.

В цикле вы создаете переменную curData, вот с ней и надо сравнивать:

function getDates(node) {
  let test = new Date()
  let testNow = test.getTime()
  let testDayNow = Number(test.getDay())
  let f = 0
  let data = []
  data.push(test)
  for (let i = 0; i < 14; i++) {
    let para = document.createElement("option");
    console.log(f)
    let curData = new Date(testNow + f * 3600 * 1000)
    let formatedDate = curData.toLocaleDateString('ru-RU', {
      month: 'long',
      day: 'numeric'
    })
    f = f + 24
    para.innerHTML = formatedDate
    para.value = i
    if (curData.getDay() == 0) {
      para.value = 0
      console.log(para.value)
    } else if (curData.getDate() == test.getDate()) {
      para.value = 1
      console.log(para.value)
    } else {
      para.value = 2
      console.log(para.value)
    }
    node.appendChild(para)
  }
  console.log(data)
}

getDates(document.getElementById('t'));
<div id="t"></div>

→ Ссылка
Автор решения: Neverm1ndo

Вы в вопросе сами ответили на свой вопрос. Вы каждую итерацию сравниваете сегодняшний день недели с сегодняшним днем недели.

 let testDayNow = Number(test.getDay()) 
 
 //...

 } else if (testDayNow == test.getDay()) { test.getDay() == test.getDay() ???

Вы же создаете каждую итерацию новую дату curDate, вот и сравнивайте с ней.

const select = document.querySelector('#dates');

(function getDates(node) {
  
  const test = new Date();
  let testNow = test.getTime();
  let testDayNow = test.getDay(); // Оборачивать в Number не обязательно, метод getDay() и так возвращает number
  
  let data = [];
 
  data.push(test);
  
  function _isToday(date) {
    return date.valueOf() === test.valueOf();
  }
  function _isSunday(date) {
    return date.getDay() === 0;
  }
  
  for (let i = 0; i < 14; i++) {
      const option = document.createElement("option");
      const currentDate = new Date(testNow + i*24 * 3600 * 1000); // вместо создания переменной и присваиваний f += 24  можно просто умножать i на 24   
      const formatedDate = currentDate.toLocaleDateString('ru-RU', {
        month: 'long',
        day: 'numeric'
      });
    
    /** такая конструкция с switch будет читаемей */
    switch(true) {
      case _isToday(currentDate): {
        option.value = 1;
        break;
      }
      case _isSunday(currentDate): {
        option.value = 0;
        break;
      }
      default: {
        option.value = 2;
        break;
      }
    }
    option.textContent = formatedDate + `(${option.value})`; // добавил скобки для наглядности.
    node.appendChild(option);
  }
})(select);
<select name="dates" id="dates"></select>

→ Ссылка