2016-05-25 6 views
2

Используя moment.js, я хочу получить разницу во времени между двумя временными метками.Неправильная часовая разница между двумя временными метками (hh: mm: ss)

Выполнение следующих,

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

+0

Возможно, это связано с смещением по GMT: вы можете попробовать UTC. Просто примечание: ['SS' используется для дробных секунд] (http://momentjs.com/docs/#/parsing/string-format/) – Bigood

+0

Да, я неправильно читаю документы. Исправил его, спасибо! – krakig

ответ

0

Проблема у вас возникли здесь в том, что при вводе 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"); 

Должно сделать вас счастливее!

EDIT: Я заметил, что вы используете HH:mm:SS для своего формата, но вместо этого вы должны использовать HH:mm:ss. «SS» даст вам дробные значения в секундах от 0 до 999, что здесь не то, что вы хотите.

+0

Когда я следую вашему коду, вывод следующий: '0: 0: 0'. Часы и минуты правильные, но секунды не – krakig

+0

Я сделал некоторые изменения, вы уже пробовали? – zoubida13

+0

Оба дают мне тот же результат, разница секунд неверна – krakig

Смежные вопросы