Как узнать, сколько недель и дней в месяце в формулировке Javascript и logi c - PullRequest
1 голос
/ 07 мая 2020

Итак, у меня есть это daterangepicker, в котором по умолчанию дата - 2020/04/15, и, кроме того, это элемент <select>, который имеет варианты «Ежедневно», «Еженедельно», «Ежемесячно» (см. Рисунок ниже).

enter image description here

Есть ли способ вычислить, для какого дня недели начинается апрель и сколько дней в апреле, когда я щелкал еженедельно или ежемесячно в раскрывающийся список, помимо daterangepicker.

Например:

В апреле 30 дней, а неделя 1 начинается с 6 апреля, в то время как в марте у него 31 день, а неделя 1 начинается с 2 марта

Я знаю, что в каждом месяце 4 недели, но вопрос в том, как я могу получить день, с которого начинается неделя в каждом месяце. Есть ли способ посчитать это в javascript? Или мне просто начать с первого дня, а потом сосчитать 7 дней?

1 Ответ

1 голос
/ 07 мая 2020

базовый c один ...

// prepare select for demo
for(let i=2015; i<2026;i++) eYear.add( new Option(i, i) )
eYear.value = 2020

function calcMonthInfos( month=0, year=2020 ) // default on January 2020
  {
  let nDay = 0, lastDay = 28, wDay, wMonth
    ; 
  do { wDay = new Date(year,month,++nDay).getDay() }
  while (wDay != 1)  // sunday is day 0 , monday day 1
    ;
  do { wMonth = new Date(year,month,++lastDay).getMonth() }
  while (wMonth == month)  //  check month changing
    ;
  return ({ monday1fst: nDay, monthDays:--lastDay })
  }  


// démo code :
btGetInfo.onclick=_=>
  {
  let monthInfo = calcMonthInfos(parseInt(eMonth.value), parseInt(eYear.value) )
    , MonthName = eMonth.options[eMonth.selectedIndex].text
    ;
  info.textContent = `First monday of ${MonthName} ${eYear.value} ` 
                   + `is the ${monthInfo.monday1fst}, ` 
                   + `this month has ${monthInfo.monthDays} days`
  }
<select id="eMonth">
  <option value="0"> January </option>
  <option value="1"> February</option>
  <option value="2"> March</option>
  <option value="3"> April</option>
  <option value="4"> May</option>
  <option value="5"> June</option>
  <option value="6"> July</option>
  <option value="7"> August</option>
  <option value="8"> September</option>
  <option value="9"> October</option>
  <option value="10"> November</option>
  <option value="11"> December</option>
  </select>

<select id="eYear"></select>

<br><br>
 
<button id="btGetInfo">get info</button>

<p id="info">...</p>
...