Как я могу рассчитать, если объект Date ближе к той или иной дате - PullRequest
0 голосов
/ 09 октября 2018

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

Нажатие на дату выберет ее в качестве даты «с» или «до».Например, если я нажму 1januari и 5 января.1 января будет датой «с», а 5 января - датой «с».Легко ли?

Теперь дело в том, что если пользователь нажимает на новую дату, мне нужно обновить текущие даты «с» и «до».Использование

stringToDate(date.dateTime) > stringToDate(this.state.fromDate)

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

Аналогичная функция делает то же самое для даты «с».Это прекрасно работает, но все это означает, что пользователи не могут выбрать дату «от», которая приходит позже, чем их исходная дата «от».

Что я хочу достичь, это следующее: Рассчитать, если дата поступленияближе к дате "от" или к дате.Поэтому, если пользователь начинает с 1 и 5 января и щелкает 2 января, я могу предположить, что он хочет обновить свою дату «с».

Моя текущая функция выглядит следующим образом:

handleFromDateSelected(date) {
    let updatedFromDate = '';
    let updatedToDate = '';

    if (this.state.fromDate) {
        if (stringToDate(date.dateTime) > stringToDate(this.state.fromDate)) {
            updatedFromDate = this.state.fromDate;
            updatedToDate = date.dateTime;
        } else {
            updatedFromDate = date.dateTime;
            updatedToDate = this.state.fromDate;
        }
    } else {
        updatedFromDate = date.dateTime;
    }

    this.setState({
        fromDate: updatedFromDate,
        toDate: updatedToDate,
    });
}

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Если вы действительно хотите проверить, с какой даты закрывается новая, что, на мой взгляд, не является хорошим выбором, вы можете преобразовать все 3 даты (от, до и новые) в метку времени и сравнить абсолютную разницу.Самый низкий из них означает, что это ближе к новому.

в примере, допустим, dateFrom, dateTo и newDate являются объектами даты:

//Returns true if newDate is closer to dateFrom
function isFromDateCloser(dateFrom, dateTo, newDate)
{
    timeStampFrom = dateFrom.getTime();
    timeStampTo = dateTo.getTime();
    timeStampNew = newDate.getTime();

    return (Math.abs(timeStampFrom - timeStampNew) < Math.abs(timeStampTo - timeStampNew));
}

if (isFromDateCloser(dateFrom, dateTo, newDate))
    dateFrom = newDate;
else
    dateTo = newDate;

В этом примереЯ произвольно выбрал, что если новая дата строго между обеими датами, новая дата будет dateTo.Если вы предпочитаете, чтобы дата стала новой, замените в ответе < на <=

0 голосов
/ 09 октября 2018

В вашем случае

 var firstDate = new Date(date.dateTime);
 var secondDate = new Date(this.state.fromDate)
          if (firstDate.getTime() > secondDate .getTime()){
  // do something here 
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...