преобразуйте 13-значный код времени в дату и отметку времени с помощью moment js и получите разницу между ними

#node.js #datetime #momentjs

Вопрос:

У меня есть время начала и время окончания следующим образом

 var starttime=1631108701000
var endtime=1631116762000
var sessionstart=moment.unix(startTime);
var sessionend=moment.unix(endTime);
var ms = moment(sessionend,"DD/MM/YYYY HH:mm:ss").diff(moment(sessionstart,"DD/MM/YYYY HH:mm:ss"));
var d = moment.duration(ms);
var timeelapsed = Math.floor(d.asHours())   moment.utc(ms).format(":mm:ss");
 

цель состоит в том, чтобы отобразить время начала и окончания с соответствующей отметкой даты и времени и показать разницу между ними, например, 2 часа 16 минут 53 секунды или 02:16:53.Приведенный выше код возвращает неверные данные. Как это исправить?

Ответ №1:

Приведенный ниже код сработал для меня

 var sessionstart= moment.unix(startTime/1000).format("DD/MM/YYYY HH:mm:ss");
var sessionend= moment.unix(endTime/1000).format("DD/MM/YYYY HH:mm:ss");
var ms = moment(sessionend,"DD/MM/YYYY HH:mm:ss").diff(moment(sessionstart,"DD/MM/YYYY HH:mm:ss"));
var d = moment.duration(ms);
var timeelapsed = Math.floor(d.asHours())   moment.utc(ms).format(":mm:ss");
 

По умолчанию moment.unix() ожидает в секундах, поэтому нам нужно разделить на 1000 и отформатировать в соответствии с требованиями.

Ответ №2:

Вы также могли бы взглянуть на этот подход. Сначала преобразуйте миллисекунды эпохи unix в секунды. Затем используйте diff функцию момента для вычисления соответствующих единиц измерения. Обратите внимание, что я добавляю соответствующие единицы измерения после каждого различия, чтобы получить точную разницу.

 const startTime = "1631108701000";
const endTime = "1631116762000";

// Converting epoch milliseconds to seconds
const startUnixTime = moment.unix(startTime / 1000);
const endUnixTime = moment.unix(endTime / 1000);

// hour difference
const hourDiff = endUnixTime.diff(startUnixTime, "hours");
startUnixTime.add(hourDiff, "hours");

// minute difference
const minDiff = endUnixTime.diff(startUnixTime, "minutes");
startUnixTime.add(minDiff, "minutes");

// second difference
const secDiff = endUnixTime.diff(startUnixTime, "seconds");

// Actual Input dates
const startDate = moment(startUnixTime).format("DD-MM-YYYY hh:mm:ss");
const endDate = moment(endUnixTime).format("DD-MM-YYYY hh:mm:ss");
console.log("Input start date", startDate);
console.log("Input end date", endDate);

// Difference in hours, minutes, seconds
console.log(hourDiff, minDiff, secDiff); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>