получение разницы во времени между датой и текущей датой с использованием момента - PullRequest
0 голосов
/ 15 января 2019

Привет. Я пытаюсь получить разницу во времени между двумя датами.Я написал функцию, которая делает это, но когда я преобразую введенную дату из общих настроек в дату момента, она дает мне однозначное число.

Используя это в моем собственном проекте реагирования

Я пыталсято же самое с датами ручного ввода в виде строки, и она отлично работает.

что я здесь не так делаю?

// Эта функция не работает должным образом (я хочу, чтобы эта функция возвращала времяразница)

export const getTimeDiffWithCurrentTime = (lastLoggedInDateTime) => {
  var moment = require('moment');
//***PROBLEM IS HERE IN THE BELLOW LINE WHERE THE OUTPUT IS 1547571895000***
  var momentLastLoggedInDateTime = moment(lastLoggedInDateTime, "DD-MM-YYYY HH:mm:ss");
  var currentDateTime = moment().format("DD-MM-YYYY HH:mm:ss");
  consoleLog(' lastLoggedInDateTime - ' + lastLoggedInDateTime + 'momentLastLoggedInDateTime - ' + momentLastLoggedInDateTime
    + ' currentDateTime - ' + currentDateTime);
  var timeDifference = currentDateTime.diff(momentLastLoggedInDateTime);
  consoleLog("Time difference - " + timeDifference);
  return timeDifference;
}

выход: lastLoggedInDateTime - 15-01-2019 17:04:55momentLastLoggedInDateTime - 1547571895000 currentDateTime - 15-01-2019 17:04:57

error -TypeError: currentDateTime.diff is not a function

Функция тестирования, которая работает

export const getTimeDiff = () => {
  var moment = require('moment');
  var now  = moment("04-09-2013 15:00:00", "DD-MM-YYYY HH:mm:ss");
  var then = moment("04-09-2013 14:59:40", "DD-MM-YYYY HH:mm:ss");
  var timeDifference = now.diff(then);
  consoleLog("Time difference - " + timeDifference);
}

вывод: Time difference - 20000

Я хочу, чтобы функция getTimeDiffWithCurrentTime работала, передав дату и получая разницу.

Ваша помощь очень ценится

R

ОБНОВЛЕНИЕ

Все заработало.Несколько замечаний.

Некоторые предлагали просто использовать var momentLastLoggedInDateTime = moment(lastLoggedInDateTime);

, но это дало мне предупреждение, подобное

Deprecation warning: value provided is not in a recognized ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info. Arguments: [0] _isAMomentObject: true, _isUTC: true, _useUTC: true, _l: undefined, _i: 2016-9-26 19:30, _f: undefined, _strict: undefined, _locale: [object Object]

ТакМне пришлось использовать var momentLastLoggedInDateTime = moment(lastLoggedInDateTime, "DD-MM-YYYY HH:mm:ss");

, что дало мне значение 1547571895000

Единственное изменение, которое я должен был внести в функцию 'getTimeDiffWithCurrentTime', было изменить var currentDateTime = moment().format("DD-MM-YYYY HH:mm:ss"); на var currentDateTime = moment();

, поэтому рабочая функция

export const getTimeDiffWithCurrentTime = (lastLoggedInDateTime) => {
  var moment = require('moment');
  var momentLastLoggedInDateTime = moment(lastLoggedInDateTime, "DD-MM-YYYY HH:mm:ss");
  var currentDateTime = moment(); //This was the change required
  consoleLog(' lastLoggedInDateTime - ' + lastLoggedInDateTime + 'momentLastLoggedInDateTime - ' + momentLastLoggedInDateTime
    + ' currentDateTime - ' + currentDateTime);
  var timeDifference = currentDateTime.diff(momentLastLoggedInDateTime);
  consoleLog("Time difference - " + timeDifference);
  return timeDifference;
}

Выход

lastLoggedInDateTime - 15-01-2019 18:12:26momentLastLoggedInDateTime - 1547575946000 currentDateTime - 1547575952574 Time difference - 6574

Спасибо

Ответы [ 2 ]

0 голосов
/ 15 января 2019

var now  = moment(new Date());
var then = moment("04-09-2013 14:59:40", "DD-MM-YYYY HH:mm:ss");
var timeDifferenceInSeconds = now.diff(then, 'seconds');
var timeDifferenceInHours = now.diff(then, 'hours');
var timeDifferenceInDay = now.diff(then, 'days');
console.log(timeDifferenceInHours, timeDifferenceInSeconds, timeDifferenceInDay);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js"></script>
0 голосов
/ 15 января 2019

в соответствии с документацией момента , в основном без параметров, функция diff возвращает число в milliseconds, вы можете использовать years, months, weeks, days, hours, minutes и seconds, если вы хотите использовать другую единицу времени.

учитывать:

По умолчанию момент # diff будет обрезать результат до нуля десятичных разрядов, возвращая целое число. Если вам нужно число с плавающей запятой, передайте true в качестве третьего аргумента.

проверить рабочий фрагмент кода, который показывает другие типы единиц.

const getTimeDiff = (differenceIn = 'milliseconds', floating= false) => {
  var now = moment("04-09-2013 15:00:00", "DD-MM-YYYY HH:mm:ss");
  var then = moment("04-09-2013 14:59:40", "DD-MM-YYYY HH:mm:ss");
  //this return the difference between now and then in milliseconds as default
  var timeDifference = now.diff(then, differenceIn, floating);
  console.log("Time difference - " + timeDifference + ' ' + differenceIn);
}

getTimeDiff();
getTimeDiff('seconds');
getTimeDiff('seconds', true);
getTimeDiff('minutes');
getTimeDiff('minutes', true);
getTimeDiff('hours');
getTimeDiff('hours', true);
getTimeDiff('days');
getTimeDiff('days', true);
getTimeDiff('weeks');
getTimeDiff('weeks', true);
getTimeDiff('months');
getTimeDiff('months', true);
getTimeDiff('years');
getTimeDiff('years', true);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.js"></script>

В вашем коде проверьте, что вы пытаетесь сделать diff из String. В основном вы делаете format перед применением diff.

const getTimeDiffWithCurrentTime = (lastLoggedInDateTime) => {
  //***PROBLEM IS HERE IN THE BELLOW LINE WHERE THE OUTPUT IS 1547571895000***
  var momentLastLoggedInDateTime = moment(lastLoggedInDateTime, "DD-MM-YYYY HH:mm:ss");
  //var currentDateTime = moment().format("DD-MM-YYYY HH:mm:ss"); IF YOU DO THIS, you get a STRING
  var currentDateTime = moment()
  console.log(' lastLoggedInDateTime - ' + lastLoggedInDateTime + 'momentLastLoggedInDateTime - ' + momentLastLoggedInDateTime +
    ' currentDateTime - ' + currentDateTime);
  var timeDifference = currentDateTime.diff(momentLastLoggedInDateTime);
  console.log("Time difference - " + timeDifference);
  return timeDifference;
}

const newDate = new Date(new Date() - 10000); //minus 10 seconds


getTimeDiffWithCurrentTime(newDate);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.js"></script>
...