如何计算日期对象是否更接近一个或另一个日期

时间:2018-10-09 10:26:11

标签: javascript date

我正在建立一个日历,人们可以从视觉日历中选择一个日期范围。

单击日期会将其选择为“开始”或“结束”日期。例如,如果我单击1januari和1月5日。 1月1日为“开始”日期,而1月5日为“开始”日期。容易吧?

现在的事情是,如果用户单击一个新日期,我将需要更新当前的“开始”和“结束”日期。使用

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

让我知道输入的日期是否晚于当前的“起始日期”,我可以使用它将当前的“到”日期更改为输入的日期,因为1月7日在1月5日之后,“必须”表示用户想要更新他们的“截止”日期。

类似的功能在“起始”日期执行相同的操作。这很好用,但是这意味着用户不能选择比原始“开始”日期晚的“开始”日期。

我要实现的目标如下:计算传入日期是否更接近“起始”日期或“终止”日期。因此,如果用户从1月1日至5日开始并单击1月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 :(得分:2)

如果您真的想检查新日期是从哪个日期关闭的,我认为这不是一个好选择,则可以将所有3个日期(从,到,再和新)转换为时间戳并比较绝对差值。最低的表示这更接近新的。

在示例中,假设dateFromdateTonewDate是日期对象:

//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。如果您希望将起始日期设为新日期,请用<

代替返回的<=

答案 1 :(得分:0)

以您的情况

 var firstDate = new Date(date.dateTime);
 var secondDate = new Date(this.state.fromDate)
          if (firstDate.getTime() > secondDate .getTime()){
  // do something here 
  }