Javascript 如何计算日期对象是否更接近某个日期
我正在构建一个日历,人们可以在其中从可视日历中选择一系列的日期 单击某个日期将选择它作为“开始”或“结束”日期。例如,如果我点击1月1日和1月5日。1月1日为“开始”日期,1月5日为“结束”日期。简单,对吗 现在的问题是,如果用户点击一个新的日期,我需要更新当前的“从”和“到”日期。使用Javascript 如何计算日期对象是否更接近某个日期,javascript,date,Javascript,Date,我正在构建一个日历,人们可以在其中从可视日历中选择一系列的日期 单击某个日期将选择它作为“开始”或“结束”日期。例如,如果我点击1月1日和1月5日。1月1日为“开始”日期,1月5日为“结束”日期。简单,对吗 现在的问题是,如果用户点击一个新的日期,我需要更新当前的“从”和“到”日期。使用 stringToDate(date.dateTime)>stringToDate(this.state.fromDate) 让我知道,如果传入日期晚于当前的“起始日期”,我可以使用将当前的“截止日期”更改为传入
stringToDate(date.dateTime)>stringToDate(this.state.fromDate)
让我知道,如果传入日期晚于当前的“起始日期”,我可以使用将当前的“截止日期”更改为传入日期,因为1月7日在1月5日之后,“必须”表示用户希望更新其“截止日期”
类似的函数对“from”日期执行相同的操作。这非常有效,但这意味着用户不能选择一个比原始“开始”日期晚的“开始”日期
我想要实现的是:计算传入日期是否更接近“开始”日期或“结束”日期。因此,如果用户从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,
});
}
就你而言
var firstDate = new Date(date.dateTime);
var secondDate = new Date(this.state.fromDate)
if (firstDate.getTime() > secondDate .getTime()){
// do something here
}
就你而言
var firstDate = new Date(date.dateTime);
var secondDate = new Date(this.state.fromDate)
if (firstDate.getTime() > secondDate .getTime()){
// do something here
}
如果您真的想检查新日期的截止日期,我认为这不是一个好的选择,您可以将所有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;
//如果newDate更接近dateFrom,则返回true
函数isFromDateCloser(dateFrom、dateTo、newDate)
{
timeStampFrom=dateFrom.getTime();
timeStampTo=dateTo.getTime();
timeStampNew=newDate.getTime();
return(Math.abs(timeStampFrom-timeStampNew)
在那个例子中,我任意选择了,如果新日期严格地介于两个日期之间,那么新日期将是dateTo。如果您希望“从”成为新日期,请在返回中替换
如果您真的想检查新日期的结束日期,在我看来,这不是一个好的选择,您可以将所有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;
//如果newDate更接近dateFrom,则返回true
函数isFromDateCloser(dateFrom、dateTo、newDate)
{
timeStampFrom=dateFrom.getTime();
timeStampTo=dateTo.getTime();
timeStampNew=newDate.getTime();
return(Math.abs(timeStampFrom-timeStampNew)
在那个例子中,我任意选择了,如果新日期严格地介于两个日期之间,那么新日期将是dateTo。如果您希望“起始日期”成为新日期,请在返回中进行替换,这将对用户的选择进行假设。我是一个用户,我选择1月1日(从),然后选择1月5日(到)。然后,我改变主意,决定我的“到”日期是1月2日,然后我的“从”日期是1月2日,我的“到”日期是1月5日。这不是我想要的。为什么不使用两个日期选择器,一个“从”和一个“到”?或者每次他选择一个新的日期时重置从和到。问题是,设计师希望两个日历彼此相邻。虽然效果很好,但它们必须相隔1个月,例如1月和2月。如果用户希望从同一个月选择2个日期,则需要使用相同的输入。就像来自的日期选择器:此日期选择器的工作方式不同。您可以根据单击的日期更改起始日期或结束日期。这将对用户的选择进行假设。我是一个用户,我选择1月1日(从),然后选择1月5日(到)。然后,我改变主意,决定我的“到”日期是1月2日,然后我的“从”日期是1月2日,我的“到”日期是1月5日。这不是我想要的。为什么不使用两个日期选择器,一个“从”和一个“到”?或者每次他选择一个新的日期时重置从和到。问题是,设计师希望两个日历彼此相邻。虽然效果很好,但它们必须相隔1个月,例如1月和2月。如果用户希望从同一个月选择2个日期,则需要使用相同的输入。就像来自的日期选择器:此日期选择器的工作方式不同。您可以根据所单击的日期更改“从”或“到”。只需检查传入日期是否晚于当前日期。这是我目前的工作。这只是检查传入日期是否晚于当前日期。这就是我目前的工作。谢谢你的工作回答,不过我已经说服了设计师让我使用两种不同的输入,就像Booking.com一样。这将使事情变得更容易。这确实是一个更好的选择,而不是猜测用户的想法。谢谢你的工作答案,但是,我已经说服设计师让我使用两种不同的输入,就像Booking.com一样。这将使事情变得更容易。这确实是一个更好的选择,而不是猜测用户的想法