Javascript momentjs获得时差

Javascript momentjs获得时差,javascript,angular,momentjs,Javascript,Angular,Momentjs,我试图获取用户在使用moment.js的页面上花费的时间,但它返回了错误的值 代码: 例如,上面的代码应该返回00:00:04,这意味着用户在该页面中的时间4秒。但我得到的是这样的06:59:55 有什么想法吗?我怀疑您正在格式化一个日期,该日期为1970年1月1日后4秒,并根据您的时区偏移量进行调整。你要找的是约会,不是约会 为什么要格式化它呢?为什么不直接记录原始的持续时间呢?你不需要时刻来减去一个时间戳 从另一个。Date.now()将获取当前时间戳: this.startDate=Dat

我试图获取用户在使用moment.js的页面上花费的时间,但它返回了错误的值

代码:

例如,上面的代码应该返回
00:00:04
,这意味着用户在该页面中的时间
4秒
。但我得到的是这样的
06:59:55


有什么想法吗?

我怀疑您正在格式化一个日期,该日期为1970年1月1日后4秒,并根据您的时区偏移量进行调整。你要找的是约会,不是约会

为什么要格式化它呢?为什么不直接记录原始的持续时间呢?你不需要时刻来减去一个时间戳 从另一个。Date.now()将获取当前时间戳:

this.startDate=Date.now();
//…过了一会儿。。。
const duration=Date.now()-this.startDate;//从那时到现在的毫秒数

您可以先尝试转换为UTC

moment.utc(moment().diff(this.dateStart)).format("HH:mm:ss.SSS"); //include milliseconds
让开始=力矩();
设置超时(()=>{
常量持续时间=矩.utc(矩().diff(开始));
log(duration.format(“HH:mm:ss.SSS”);
}, 1500);

如果您只需要秒数(diff),为什么不将momentjs的diff函数与测量参数一起使用(支持的参数有
小时
分钟
默认值为毫秒。)

let dateStart=moment([2020,9,2,12,0,0,125]);
让未来时间=时刻();
设secondsAgo=(futureTime.diff(dateStart,'seconds')%60);
让minutesAgo=(futureTime.diff(dateStart,'minutes')%60);
let hoursAgo=futureTime.diff(日期开始,“小时”);
log('hour:'+hoursAgo+',min:'+minutesAgo+',seconds:'+secondsAgo)
让hms=时刻({
小时:hoursAgo,
分钟:分钟前,
秒:第二个西米
});
log(hms.format('HH:mm:ss')

plotly.js中没有将差异作为新的plotly对象返回的函数。我认为唯一的方法是以秒为单位计算时间差,然后计算分钟和小时

以下几点应该行得通。它将时差返回为
字符串
。所以秒和分总是在0到60之间,小时大于0。
74:12:40
的结果意味着用户在该页面上停留了74小时12分40秒

function runTest() {
    let startDate = moment('02.10.2020 8:00:00', 'DD.MM.YYYY HH:mm:ss');
    let endDate = moment('03.10.2020 10:24:38', 'DD.MM.YYYY HH:mm:ss');
    getDifferenceTime(startDate, endDate);
}


function getDifferenceTime(startDate, endDate) {
    // Get time difference in seconds
    let seconds = endDate.diff(startDate, 'seconds');
    let minutes = 0;
    let hours = 0;
    // Calculate number of minutes
    if (seconds >= 60) {
        minutes = Math.floor(seconds / 60);
        seconds -= minutes * 60;
    }
    // Calculate number of hours
    if (minutes >= 60) {
        hours = Math.floor(minutes / 60);
        minutes -= hours * 60;
    }
    let timeString = hours + ':' + minutes + ':' + seconds;
    console.log(timeString);
    return timeString;
}

您可以使用上面截取的代码进行测试。它应该返回
26:24:38
,这是您的预期输出。

我怀疑您正在格式化一个从1970年1月1日起4秒的日期,并根据您的时区偏移量进行调整。你要找的是时间间隔,不是日期。@rayhatfield你认为我应该怎么做?
1
如果我使用
moment.duration(this.dateStart)
它给了我
PT444891H22M42.093S
2
为什么不直接记录原始的时间?
请告诉我怎么做?我对所有的解决方案都持开放态度,只要它们给我我想要的东西,返回的是
3848
idk这意味着什么:d这意味着开始和结束之间有3848毫秒,或者3.848秒。当然。除以1000得到秒,除以60得到分钟,等等,或者使用许多现有软件包中的一个,例如。无法做到:/i如何从
utc
更改时区?看看我刚才给你的代码,这是对您的代码的一个轻微更改我希望您的方法对代码的最低要求是干净的,但我真的不想使用
utc()
有什么方法可以让我知道如何使用我的本地代码而不是utc?您使用什么都不重要。您不是指区域设置时间,您只需要它以可读的形式显示。我不想要秒,我想要小时、分钟和秒。我已经更新了代码,以HH:mm:ss格式显示差异
var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b, 'days') // 1
function runTest() {
    let startDate = moment('02.10.2020 8:00:00', 'DD.MM.YYYY HH:mm:ss');
    let endDate = moment('03.10.2020 10:24:38', 'DD.MM.YYYY HH:mm:ss');
    getDifferenceTime(startDate, endDate);
}


function getDifferenceTime(startDate, endDate) {
    // Get time difference in seconds
    let seconds = endDate.diff(startDate, 'seconds');
    let minutes = 0;
    let hours = 0;
    // Calculate number of minutes
    if (seconds >= 60) {
        minutes = Math.floor(seconds / 60);
        seconds -= minutes * 60;
    }
    // Calculate number of hours
    if (minutes >= 60) {
        hours = Math.floor(minutes / 60);
        minutes -= hours * 60;
    }
    let timeString = hours + ':' + minutes + ':' + seconds;
    console.log(timeString);
    return timeString;
}