0

次のような文字列を返すことができる関数が欲しいです:

これは、秒単位の時間値を表す数値または文字列である 1 つの入力を受け取ります。

入力が の場合0、 を返し"0s"ます。

入力が10(または 60 未満) の場合は、末尾に「s」が付いた数値のみを返します: "10s"

入力が60、などの場合は120180分数のみを末尾に「m」を付けて返します。秒は含まれません: "1m"/ "2m"/ "3m"(必要でない場合は秒を表示しないでください)。

入力が の場合は65、戻ります"1m05s"(秒の前に数値または時間がある場合は、常に先行ゼロを表示します)。

入力が などの場合36007200末尾に「h」を付けて丸めた時間を返します: "1h"/ "2h"(分の場合と同じロジック)。

入力が の場合は3661、戻り"1h01m01s"ます (分と秒の両方で同じロジックを使用します。値の前に何かがある場合は、先頭のゼロを表示します)。

時間まで表示する値だけが必要です。

4

1 に答える 1

1

ここにあります:

function toTimeString(num){
    if (typeof num != 'undefined'){
        if (!isNaN(num*1)){
            var mins=parseInt(num/60), secs=num % 60, hours=false,ret={};
            if (num>=3600){
                hours = parseInt(mins / 60);
                mins = mins-(hours*60);
                if (mins < 10 && mins != 0) mins = '0'+mins;
                else mins = false;
            }

            ret.h = (hours?hours+'h':'');
            ret.m = (mins?mins+'m':'');
            if (mins == 0 && !hours && secs == 0) ret.s = '0s';
            else if (secs){
                if (secs < 10 && mins) ret.s = '0'+secs+'s';
                else ret.s = secs+'s';
            }
            else ret.s = '';

            return ret.h+ret.m+ret.s;
        }
        else throw new TypeError("Passed argument is not a number");
    }
    else throw new ReferenceError("No arguments were passed.");
}

少し論理的な説明:

  1. 値のカウント
    1. 分はnum60で割って切り捨て
    2. 分単位などを気にせずに秒を数える最も簡単な方法は、60 の割り算の残りとnum
    3. デフォルトでは時間は気にしないので、そのままにしておきましょうfalse
  2. 時間を数える
    1. numが 3600 以上の場合は、時間の使用を検討する時期です。それでは、分を 60 で割り、それも切り捨てましょう。
      • しかし、時間を使用する場合は、別の方法で分を処理する必要があります。分から 60 を掛けた時間を引きましょう。必要に応じて先行ゼロを追加します。また、結果の数値が の場合は0、表示したくないので、 にしますfalse
    2. 数が 3600 未満の場合、なぜ時間を気にする必要があるのでしょうか。先に進みます。
  3. 出力の解析
    1. 時間と分がundefinedまたは0の場合は、値を空の文字列に設定します。それ以外の場合は、値をそれぞれ"h"および に"m"追加して使用します
    2. 解析秒
      • 分が0、時が または のいずれfalse0で、秒もゼロの場合 (入力が である場合0)、戻ります"0s"
      • 秒が10 未満undefinedまたは10 未満の場合は、先頭にゼロを追加し、0"s"
      • それ以外の場合は、秒が 10 より大きい場合は、単に"s"追加して返します。
      • それ以外の場合は、表示するメモがあるため、空の文字列にします。
于 2013-02-23T17:28:24.370 に答える