获取Javascript中Date对象之间差异的正确方法

Correct way to get the difference between Date objects in Javascript

本文关键字:方法 之间 Javascript Date 对象 获取      更新时间:2023-09-26

这是一个非常常见的问题,但我找不到正确的答案。我有以下内容:

tcom
Mon Dec 14 2015 12:22:28 GMT-0500 (PET)
treq
Mon Dec 14 2015 12:18:27 GMT-0500 (PET)
tcom - treq
241122
tdif = new Date(tcom - treq);
Wed Dec 31 1969 19:04:01 GMT-0500 (PET)

我看到过这样的答案:用javascript获取两个日期之间的差异?但这是一种固定的方法,我事先不知道区别是几天、几小时、几分钟还是几秒钟。

感谢

返回的值以毫秒为单位,所以在这里进行一些数学计算。1天=24 x 60 x 60 x 10=864000毫秒。

是的,减去两个Date对象是以毫秒为单位查找差异的正确方法。

以下是等效的:

date1 - date2
date1.getTime() - date2.getTime()

如果您想将结果转换为年、月、天等,您可以在epoch创建一个新的Date对象,其中毫秒部分设置为您获得的偏移量。例如:

var start = new Date();
// some time passes...
var end = new Date();
var elapsedMillis = end - start;
var elapsed = new Date(1970, 0, 1, 0, 0, 0, elapsedMillis);

然后可以使用getMinutes()getSeconds()等方法来获得所需的组件。

如果您试图在中获得多个不同单位的差异,您可以使用一个取枚举值的函数,如:

var Units = {
    MS: 1,
    SEC: 1000,
    MIN: 1000 * 60,
    HOUR: 1000 * 60 * 60,
    DAY: 1000 * 60 * 60 * 24,
    YEAR: 1000 * 60 * 60 * 24 * 365
};
function getDateDiff( a, b, unit ) {
    return (a - b) / unit;
}

然后你可以很容易地称之为:

getDateDiff( date1, date2, Units.HOUR );

如果你只需要毫秒,那么一个简单的减法就是你最好的朋友。