#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>