如何在JavaScript中获得两个日期之间的差异?
2022-08-30 05:08:52
我正在创建一个应用程序,该应用程序允许您定义具有时间范围的事件。我想在用户选择或更改开始日期时自动填写结束日期。但是,我不太清楚如何获得两个时间之间的差异,然后如何使用该差异创建新的结束日期。
我正在创建一个应用程序,该应用程序允许您定义具有时间范围的事件。我想在用户选择或更改开始日期时自动填写结束日期。但是,我不太清楚如何获得两个时间之间的差异,然后如何使用该差异创建新的结束日期。
在 JavaScript 中,可以通过调用方法或仅在数值表达式中使用日期,将日期转换为自 epoc 以来的毫秒数。getTime()
因此,要获得差异,只需减去两个日期即可。
若要基于差异创建新日期,只需在构造函数中传递毫秒数。
var oldBegin = ...
var oldEnd = ...
var newBegin = ...
var newEnd = new Date(newBegin + oldEnd - oldBegin);
这应该只是工作
编辑:修复了@bdukes指出的错误
编辑:
为了解释行为,、 和 是实例。调用运算符,并将触发 Javascript 自动转换,并将自动调用这些对象的原型方法。碰巧该方法在对象中实现为对 的调用。oldBegin
oldEnd
newBegin
Date
+
-
valueOf()
valueOf()
Date
getTime()
所以基本上:date.getTime() === date.valueOf() === (0 + date) === (+date)
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对象的力量,但它实际上似乎是一个定时炸弹