我正在建立一个日历,人们可以从视觉日历中选择一个日期范围。
单击日期会将其选择为“开始”或“结束”日期。例如,如果我单击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,
});
}
答案 0 :(得分:2)
如果您真的想检查新日期是从哪个日期关闭的,我认为这不是一个好选择,则可以将所有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。如果您希望将起始日期设为新日期,请用<
<=
答案 1 :(得分:0)
以您的情况
var firstDate = new Date(date.dateTime);
var secondDate = new Date(this.state.fromDate)
if (firstDate.getTime() > secondDate .getTime()){
// do something here
}