0

私のシステムでは、古い IBM ユリウス形式を使用してタイム スタンプが返されます。

例:
午前 12 時 0 分 1 秒 (午前 0 時から 1 秒) は 01 が返されます。
12 時 22 分 15 秒 AM は
2215 が返されます。 .
7 時 45 分 1 秒 AM は 74501 を返します
。7 時 22 分 15 秒 PM は 192215 を返します。

これらを次の形式にする正規表現が必要です:
12 o'clock 0 minutes and 1 seconds AM (真夜中から 1 秒後): 00:00.01
12 o'clock 22 minutes and 15 seconds AM: 00:22.15
1 o'時計 22 分 15 秒 AM: 01:22.15
7 時 45 分 1 秒 AM: 7:45.01
7 時 22 分 15 秒 PM: 19:22.15

どんな助けでも大歓迎です。

解決 策 MikeM のおかげで、ここに解決策があります。

//var time = '01';
//var time = '2215';
//var time = '12215';
//var time = '74501';
var time = '192215';

time = time.replace( /^(?:(?:(\d)?(\d))?(\d\d))?(\d\d)$/,
  function ( all, hr1, hr2, min, sec ) {
    return (hr1 || '0') + (hr2 || '0') + ':' + (min || '00') + '.' + sec;
  }
);
4

2 に答える 2

2

以下はあなたの例で動作しますが、それ以上はテストしていません

//var time = '01';
//var time = '2215';
//var time = '12215';
//var time = '74501';
var time = '192215';

time = time.replace( /^(?:(?:(\d)?(\d))?(\d\d))?(\d\d)$/,
  function ( all, hr1, hr2, min, sec ) {
    return (hr1 || '0') + (hr2 || '0') + ':' + (min || '00') + '.' + sec;
  }
);

くれ07:45.01ません7:45.01が、 に沿うように01:22.15

于 2013-04-12T18:47:38.220 に答える
1

私はあなたに手がかりを与えるでしょう:

  1. 戻り値を数値に変換します。
  2. num % 100 は秒です。
  3. (num / 100) % 100 は分です。
  4. (num / 10000) は時間です。
  5. 時間が 12 時間未満の場合は、AM を使用します
  6. 12時以上ならPM、13時以上なら12を引く。

それを行う別の方法は、文字列として扱うことです。しかし、その後、長さ 6 になるように先頭に十分なゼロを追加してから、それを 2 文字のビットに分割し、それぞれを「int」に変換する必要があります。これは、100 で mod-ing し、100 と 10,000 でダイビングするよりもはるかに多くの作業です。

これらの 2 桁のセクションに 59 より大きい値があってはなりません。

ノート

@radi8 は、私が忘れていたことに気づきました。上記のアルゴリズムの「/」(除算)は、正しく機能するために整数演算でなければならないことに注意してください。一部のプログラミング言語は、整数演算を提供します。JavaScript はそうではありません。

JavaScript は浮動小数点演算を使用するため、除算する前に秒数を減算します。次に、分数を同様に減算すると、次のステップが修正されます。

同じことを達成するために除算後に使用することもできますMath.floor()(これらは正の数であるため)。

これを行うために変更されたOPのコードは次のとおりです。

$(function () {
    var val1 = 41215,hr=0,min=0,sec=0;
    sec = val1%100;
    val1 = Math.floor(val1 / 100);
    min = val1%100;
    hr = Math.floor(val1 / 100);
    // format the result. This example could show 1:1:1 instead of 01:01:01
    tst2 = hr.toString()+':'+min.toString()+'.'+sec.toString();
    alert(tst2.toString());
});
于 2013-04-12T16:57:18.897 に答える