我正在构建一个日历,人们可以从可视日历中选择一系列日期。
单击某个日期会将其选择为“开始”或“结束”日期。例如,如果我单击 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,
});
}
最佳答案
如果您确实想检查新日期从哪个日期开始关闭(在我看来这不是一个好的选择),您可以将所有 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。如果您希望 from 成为新日期,请在 return 中替换 <
通过<=
关于javascript - 如何计算日期对象是否更接近一个或另一个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52718780/