Проблема
Я не могу запустить этот код в песочнице (при взаимодействии с DateTimePicker
по какой-то причине возникает ошибка utils.getYearText is not a function
TypeError), но я думаю, что знаю, в чем проблема.
Вы определяете timeCalc
для использования двух аргументов, startDate
и endDate
const timeCalc = (startDate, endDate) => {
var start = moment(startDate);
var end = moment(endDate);
console.log(end.diff(start, "hours", true) + ' hours');
}
, но в кнопке для его запуска вы просто присоединяете функцию к обработчику onClick
, так что на самом деле только передал объект события в качестве первого аргумента и undefined для второго.
<button onClick={timeCalc}>Time Duration: {duration}</button>
Затем я протестировал timeCalc
вручную в теле функции, передав ему startDate
и endDate
значения состояния, и он (предположительно) правильно возвращает 0 hours
, как и следовало ожидать от двух почти одинаковых временных меток.
const timeCalc = (startDate, endDate) => {
var start = moment(startDate);
var end = moment(endDate);
console.log(end.diff(start, "hours", true) + " hours");
};
timeCalc(new Date(), new Date());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/moment.min.js"></script>
Решение
Либо удалите аргументы в timeCalc
, чтобы ссылочные значения startDate
и endDate
были единственными в глобальном область действия компонента
const timeCalc = () => {
var start = moment(startDate);
var end = moment(endDate);
console.log(end.diff(start, "hours", true) + ' hours');
}
Или явно передать значения состояния в обратный вызов
<button onClick={() => timeCalc(startDate, endDate)}>
Time Duration: {duration}
</button>