2017-02-06 13 views
1

私はHH:mmの形式の時刻データ配列を13:58のように持っています。配列に異なる時刻の50個のエントリがあるとします。例えば、18:29の新しい時間をどのように比較すれば、それはどの内部配列よりも大きいのですか?毎回各時間を秒に変換すべきか、それともより良いアプローチが必要なのでしょうか?javascriptでの比較時間

+0

からtrueを返すかどうかを確認するためにArray.every方法使用しています:02'文字列を比較はうまくいくはずです(私の視点から見れば秒への変換が望ましいでしょう)。 – Sirko

+0

はい、すべての繰り返しで計算を行う必要がないので、秒に変換する方が良いでしょう。配列 'some'はおそらくあなたが使いたいものです。 – epascarello

+0

秒への変換は常に優先されます。先頭のゼロを忘れると文字列を比較するとバグが発生するためです。 '' 2 "< "10" --> false' – Shilly

答えて

1

あなたはmomentjsを使用することができます。

var time1 = "18:58"; 
var time2 = "20:30"; 

var isBefore = moment(time1, "HH:mm").isBefore(moment(time2, "HH:mm")); 
console.log(isBefore); 
0

あなたは、コンパレータ機能を書くことができます。時間と分をDateコンストラクタに渡してミリ秒を取得するだけです。

function toIntArray(arr) { 
 
    return arr.map(function(x) { return parseInt(x, 10) }); 
 
} 
 
function timeToMillisecondsUTC(time) { 
 
    var tokens = toIntArray(time.split(':')); 
 
    return Date.UTC(1970, 0, 1, tokens[0], tokens[1]); 
 
} 
 
function timeCompare(a, b) { 
 
    return timeToMillisecondsUTC(a) - timeToMillisecondsUTC(b); 
 
} 
 

 
var dateStrings = [ '13:58', '18:29', '15:25', '12:01' ]; 
 

 
console.log(dateStrings.sort(timeCompare));
.as-console-wrapper { top: 0; max-height: 100% !important; }

0

ここで分の数に時間を変換するために、正規表現とString.replaceを使用するソリューションですので、簡単に比較することができます。

ザ・あなたは `01、例えば、などの値をエンコードする場合は、リストの各エントリは、述語関数

let convert = s => s.replace(/(\d+):(\d+)/, (match, $1, $2) => $1*60 + $2*1); 
 
let list = ["11:25", "10:38"]; 
 
let out = list.every(entry => convert(entry) > convert("18:29")); 
 

 
console.log(out)

+0

はこのes6コードですか?私はそれを蒸散する必要がありますか? – user1765862

+0

古いブラウザーでは矢の機能を移動する必要があるかもしれませんし、通常の機能 – alebianco