如何获得JavaScript中两个日期之间的区别?

时间:2020-03-05 18:47:06  来源:igfitidea点击:

我正在创建一个应用程序,可让我们定义带有时间范围的事件。我想在用户选择或者更改开始日期时自动填写结束日期。但是,我不太清楚如何获得两次之间的差异,然后如何使用该差异创建新的结束日期。

解决方案

回答

在JavaScript中,可以通过调用getTime()方法或者仅在数字表达式中使用日期,将日期转换为自epoc以来的毫秒数。

因此,要获得差异,只需将两个日期相减即可。

要基于差异创建新日期,只需在构造函数中传递毫秒数即可。

var oldBegin = ...
var oldEnd = ...
var newBegin = ...

var newEnd = new Date(newBegin + oldEnd - oldBegin);

这应该工作

编辑:修复了@bdukes指出的错误

编辑:

对于行为的解释,oldBeginoldEndnewBeginDate实例。调用运算符+-将触发Javascript自动转换,并将自动调用这些对象的valueOf()原型方法。碰巧,在Date对象中实现了valueOf()方法,是对getTime()的调用。

所以基本上是这样的:date.getTime()=== date.valueOf()===(0 + date)===(+ date)

回答

如果我们使用Date对象,然后对两个日期使用getTime()函数,它将以数字值给出自1970年1月1日以来的时间。然后,我们可以获取这些数字之间的差。

如果那对我们没有帮助,请查看完整的文档:http://www.w3schools.com/jsref/jsref_obj_date.asp

回答

如果我们不关心时间部分,则可以使用.getDate()和.setDate()来设置日期部分。

因此,要将结束日期设置为开始日期之后的2周,请执行以下操作:

function GetEndDate(startDate)
{
    var endDate = new Date(startDate.getTime());
    endDate.setDate(endDate.getDate()+14);
    return endDate;
}

要返回两个日期之间的时差(以天为单位),请执行以下操作:

function GetDateDiff(startDate, endDate)
{
    return endDate.getDate() - startDate.getDate();
}

最后,让我们修改第一个函数,使其可以将2nd返回的值用作参数:

function GetEndDate(startDate, days)
{
    var endDate = new Date(startDate.getTime());
    endDate.setDate(endDate.getDate() + days);
    return endDate;
}

回答

感谢@Vincent Robert,我最终使用了基本示例,尽管实际上是newBegin + oldEnd oldBegin。这是简化的最终解决方案:

// don't update end date if there's already an end date but not an old start date
    if (!oldEnd || oldBegin) {
        var selectedDateSpan = 1800000; // 30 minutes
        if (oldEnd) {
            selectedDateSpan = oldEnd - oldBegin;
        }

       newEnd = new Date(newBegin.getTime() + selectedDateSpan));
    }