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

标签 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,
    });
}

最佳答案

如果您确实想检查新日期从哪个日期开始关闭(在我看来这不是一个好的选择),您可以将所有 3 个日期(从、到和新)转换为时间戳并比较绝对差异。最低的意味着这更接近新的。

在示例中,我们假设 dateFrom , dateTonewDate是日期对象:

//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/

相关文章:

javascript - Chrome 扩展程序可以公开虚拟相机并对其进行渲染吗?

javascript - 具有复杂计算的异步回调Javascript

javascript - 以秒为单位获取两个日期之间的时差

mysql 从今天开始选择 3 天的记录

javascript - 为 getter 提供默认值,而不会导致 Angular 2 模型类中的堆栈溢出

javascript - Node 和 Node-Webkit 之间的奇数速度差异(~10ms VS ~520ms)

php - SQL从日期以及最低和最高值中选择不同的最小和最大记录

java - 毫秒至今 C++

javascript - 为什么在 javascript 中,创建 1941 年 10 月 1 日到 1945 年 10 月 14 日之间的日期并添加 GMT+0630 作为时区

javascript - Vue-Echarts中设置一个32*32的图片作为光标