Как рассчитать число вторника в выбранном диапазоне дат с помощью реагирования? - PullRequest
0 голосов
/ 13 июня 2018

Я выберу диапазон дат из календаря, скажем, например, я выберу диапазон дат от 10 июня до 26 июля . Мне нужно вычислить число вторника и четверга в выбранном диапазоне

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Вы можете сделать это легко с библиотекой моментов (http://momentjs.com,, вы можете добавить ее в проект с моментом установки npm , а затем просто импортировать его в компонент, где вам это нужно).

  countDays = () => {
    let { date1, date2 } = this.state;
    let tuesdays = 0,
      thursdays = 0;

    date1 = moment(date1);
    date2 = moment(date2);
    let fromDayWeek = date1.isoWeeks();
    let toDayWeek = date2.isoWeeks();
    let fromDay = date1.isoWeekday();
    let toDay = date2.isoWeekday();
    let weekIteration = toDayWeek - fromDayWeek;
    let j = 1,
      daysOfWeek = 7;

    for (let i = 0; i <= weekIteration; i++) {
      // iterating throught days - first day = 1 = monday, last day = 7 = sunday
      j = i === 0 ? fromDay : 1; // we want to start counting for the first selected date
      daysOfWeek = i === weekIteration - 1 ? toDay : 7; // we want to end counting for the last selected date

      for (j; j <= daysOfWeek; j++) {
        // if it's tuesday, it is 2 day of week
        if (j === 2) {
          tuesdays++;
        }
        // if it's thursday, it is 4 day of week
        if (j === 4) {
          thursdays++;
        }
      }
    }

    return {
      tuesdays,
      thursdays
    };
  };

Ознакомьтесь с полностью рабочим решением на данный момент здесь: https://codesandbox.io/s/x2w6nq6npq

0 голосов
/ 13 июня 2018

Однако это можно упростить, но это самый простой способ.

Я предполагаю, что у вас есть Datepicker для диапазона, например, предположим -

<input type="date" name="from"/>
<input type="date" name="to"/>

Теперь мы получаем даты изввод в качестве значения и циклический переход -

var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
    tuesdays=[],
    mondays=[];

$('button').click(function(){
var startDate = new Date($('input[name="from"]').val()),
    endDate =  new Date($('input[name="to"]').val());

  while(startDate <= endDate){

    var dayName = days[new Date(startDate).getDay()];

    if(dayName==="Monday"){
       mondays.push(new Date(startDate));
    }

    if(dayName ==="Tuesday"){
      tuesdays.push(new Date(startDate));
    }

    startDate = new Date(startDate).setDate(new Date(startDate).getDate() + 1); 
  }
});

Пройдите начальную и конечную дату и получите название дня.

Посмотрите на эту скрипку, которую я для вас сделал - http://jsfiddle.net/xpvt214o/220346/

PS Убедитесь, что вы поставили валидацию StartDate ниже EndDate и других, если это необходимо.Это всего лишь пример, чтобы начать с него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...