2012-12-05 16 views
7

javascriptでISO 8601の日付を各文字列のDateオブジェクトを作成するのではなく、文字列として比較したいと思います。javascriptでISO 8601の日付文字列を比較

var date_array = ['2012-10-01','2012-11-27','2012-12-23']; 
console.log(date_array[0] < date_array[1]) // gives true 
console.log(date_array[1] > date_array[2]) // gives false 

これは、文字列の比較が日付文字列ごとにオブジェクトを作成してオブジェクトを比較するよりも速くなければならないと考えているためです。

これらの比較は、一部のブラウザでは正常に動作するようです。この種の アルファベット 辞書型の文字列比較がすべてのブラウザで機能するとは思いますか? Dateオブジェクトを使用するよりも実際にこの日付比較方法が高速ですか?

+2

フォーマットが大単位→小単位であり、すべての文字列が各フィールドの長さが同じであれば(必要に応じて先頭に0を記入してください)、問題はありません。 – nhahtdh

+1

関連リンク:[ここ](http://jsperf.com/date-object-creation/2)は、_Date_コンストラクタを使用した場合のops/secを示します。[here](http://jsperf.com/operator-vs -localecompage/3)は文字列の比較と[ここ](http://jsperf.com/inequality-str-vs-int)int比較です。 –

+0

[wikipedia](https://en.wikipedia.org/wiki/ISO_8601#General_principles)によると、ISO 8601の日付の構成要素は辞書順になっていますので、上記の作業はうまくいくはずです – Dogoku

答えて

6

この比較演算子を使用すると、文字列値lexicographicallyが表示されます。これは、辞書順を意味します。

ASCIIでは、小数点は最も小さい(0,0x30)から最大(9,0x39)まで順に格納されます。これらの形式が一貫して最大値(年)から最小値(日)に常にあり、常に0が可能な限り大きな値に設定されている場合、これらの比較は問題ありません。

関連する問題