【问题标题】:Javascript: Calculating time difference returns none issueJavascript:计算时差不会返回任何问题
【发布时间】:2021-10-12 19:05:48
【问题描述】:

我正在尝试使用 hr/min/sec 格式计算开始和结束之间的时间差。我下面的函数的问题是我的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);

控制台的屏幕截图,它是空白的:(主要问题)

我尝试了什么:

如果我执行类似的代码,我会在修剪时收到意外的字符串错误

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

所以我先用变量分隔它,然后用修剪返回。

预期输出(基于给定值):

39 minute 40 second

【问题讨论】:

  • "11:10:10" - "10:30:30" === NaN 你不能减去字符串...return trim(...) - trim 不是一个函数,除非你创建它
  • 您需要一个函数将"hh:mm:ss" 转换为秒...const stringToSeconds=s =&gt; s.split(':').map(Number).reduce((a,b)=&gt;a*60+b); 会做到这一点
  • 另外,除非绝对必要,否则不要使用全局变量...即$s$e$a$h$m - 如果您想要可读性更好,请更好地命名这些变量代码

标签: javascript function return trim floor


【解决方案1】:

请更改代码

$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]);

【讨论】:

    猜你喜欢
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 2011-06-15
    相关资源
    最近更新 更多