如何在JavaScript中获得两个日期之间的差异?

2022-08-30 05:08:52

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


答案 1

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

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

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

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

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

这应该只是工作

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

编辑

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

所以基本上:date.getTime() === date.valueOf() === (0 + date) === (+date)


答案 2

JavaScript 完美支持开箱即用的日期差异

https://jsfiddle.net/b9chris/v5twbe3h/

var msMinute = 60*1000, 
    msDay = 60*60*24*1000,
    a = new Date(2012, 2, 12, 23, 59, 59),
    b = new Date("2013 march 12");


console.log(Math.floor((b - a) / msDay) + ' full days between'); // 364
console.log(Math.floor(((b - a) % msDay) / msMinute) + ' full minutes between'); // 0

现在有一些陷阱。试试这个:

console.log(a - 10); // 1331614798990
console.log(a + 10); // mixed string

因此,如果您有添加数字和日期的风险,请直接将日期转换为日期。number

console.log(a.getTime() - 10); // 1331614798990
console.log(a.getTime() + 10); // 1331614799010

我的第一个例子演示了Date对象的力量,但它实际上似乎是一个定时炸弹