如何获得JavaScript中两个日期之间的区别?
我正在创建一个应用程序,可让我们定义带有时间范围的事件。我想在用户选择或者更改开始日期时自动填写结束日期。但是,我不太清楚如何获得两次之间的差异,然后如何使用该差异创建新的结束日期。
解决方案
回答
在JavaScript中,可以通过调用getTime()方法或者仅在数字表达式中使用日期,将日期转换为自epoc以来的毫秒数。
因此,要获得差异,只需将两个日期相减即可。
要基于差异创建新日期,只需在构造函数中传递毫秒数即可。
var oldBegin = ... var oldEnd = ... var newBegin = ... var newEnd = new Date(newBegin + oldEnd - oldBegin);
这应该工作
编辑:修复了@bdukes指出的错误
编辑:
对于行为的解释,oldBegin
,oldEnd
和newBegin
是Date
实例。调用运算符+
和-
将触发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)); }