Javascript: расчет разницы во времени не возвращает никаких проблем

avatar
user16409170
9 августа 2021 в 02:08
58
1
0

Я пытаюсь рассчитать разницу во времени между началом и концом в формате час/мин/сек. Моя проблема с моей функцией ниже заключается в том, что мой console.log не возвращает никакого значения. Надеюсь на помощь в этом.

            var mf_start   = "10:30:30";
            var mf_end     = "11:10:10";

            function time_interval(mf_start,mf_end)
            {
                $s = mf_start;
                $e = mf_end;
                if ($s < $e)
                {
                    $a = $e - $s;
                }
                else
                {
                    $e = '+1 day',$e;
                    $a = $e - $s;
                }
                
                $h = Math.floor($a/3600);
                $m = Math.floor(($a%3600)/60);
                $s = $a%60;
                
                var str = ($h?$h+' hour ':'')+($m?$m+' minute ':'')+($s?$s + ' second ':'');
                return str.trim();
            }
            
            var c = time_interval(mf_start,mf_end);
            console.log(c);

Скриншот консоли, он пустой: (основная проблема)

1

Что я пробовал:

Я получаю непредвиденную ошибку строки в моем триммере, если я делаю такой код, как

return trim(($h?$h.' hour ':'').($m?$m.' minute ':'').($s?$s.' second ':''));

поэтому я сначала разделил его с помощью переменной, а затем вернул с обрезкой.

Ожидаемый результат (на основе заданных значений):

39 minute 40 second
Источник
Bravo
9 августа 2021 в 02:11
0

"11:10:10" - "10:30:30" === NaN строки вычитать нельзя... return trim(...) - обрезка не является функцией, если ее не создать

Bravo
9 августа 2021 в 02:15
0

вам понадобится функция для преобразования "hh:mm:ss" в секунды ... const stringToSeconds=s => s.split(':').map(Number).reduce((a,b)=>a*60+b); сделает это

Bravo
9 августа 2021 в 02:17
0

Кроме того, прекратите использовать глобальные переменные без крайней необходимости... т.е. $s, $e, $a, $h, $m - и назовите эти переменные лучше, если вы хотите читаемый код

Ответы (1)

avatar
Kirill Savik
9 августа 2021 в 02:23
0

Пожалуйста, измените код с

$s = mf_start;
$e = mf_end;

до

$s = mf_start.split(":");
$s = Number($s[0])*3600 + Number($s[1])*60 + Number($s[2]);
$e = mf_end.split(":");
$e = Number($e[0])*3600 + Number($e[1])*60 + Number($e[2]);