簡體   English   中英

2個時間戳之間的小時差錯(hh:mm:ss)

[英]Wrong hour difference between 2 timestamps (hh:mm:ss)

使用moment.js,我想獲得兩個時間戳之間的時差。

執行以下操作

var prevTime = moment('23:01:53', "HH:mm:SS");
var nextTime = moment('23:01:56', "HH:mm:SS");

var duration = moment(nextTime.diff(prevTime)).format("HH:mm:SS");

我得到這個結果:

01:00:03

為什么我會相差1小時? 秒和分鍾似乎工作良好。

之后,我嘗試了以下方法:

function time_diff(t1, t2) {
    var parts = t1.split(':');
    var d1 = new Date(0, 0, 0, parts[0], parts[1], parts[2]);
    parts = t2.split(':');
    var d2 = new Date(new Date(0, 0, 0, parts[0], parts[1], parts[2]) - d1);
    return (d2.getHours() + ':' + d2.getMinutes() + ':' + d2.getSeconds());
}

var diff = time_diff('23:01:53','23:01:56');

輸出是: 1:0:3

您在這里遇到的問題是,將nextTime.diff()放入矩構造函數中時,您實際上將毫秒饋入了moment() ,並且試圖將其解釋為時間戳,這就是為什么無法獲得預期的原因結果。

除了獲得時間並手動重建所需的內容之外,沒有“巧妙的方式”獲得所需的結果:

var dur = moment.duration(nextTime.diff(prevTime)); 
var formattedDuration = dur.get("hours") +":"+ dur.get("minutes") +":"+ dur.get("seconds");

還有一個更優雅的版本,它將在輸出中為您提供零填充:

var difference = nextTime.diff(prevTime);
var dur = moment.duration(difference);
var zeroPaddedDuration = Math.floor(dur.asHours()) + moment.utc(difference).format(":mm:ss");

應該讓你更快樂!

編輯:我已經注意到您使用HH:mm:SS作為格式,但是您應該改為使用HH:mm:ss “ SS”將為您提供介於0到999之間的秒的分數值,這不是您想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM