0

JavaScript コードで Regex を使用して日時文字列をソートしようとしていますが、問題が発生しています。文字列 "MM/DD/YYYY HH:MM:SS" の HH 部分が 1 桁の場合、私のプログラムは桁が欠けているためそれを並べ替えます。

私の正規表現はこれです(問題の部分は太字です):

/^(\d{ 1,2 })[/- ](\d{ 1,2 })[/- ](\d{ 4 })[\s]( \d{ 1, 2} )[\ :](\d{ 2 })[\:](\d{ 2 })[\s]([ AP]M)?/g

数値が 1 桁の場合、HH の前にゼロを追加する方法はありますか? .replace() メソッドを使用しないと、並べ替え関数のセクションでは機能しないためです。

前もって感謝します!

4

3 に答える 3

0

この件については少し遅れていますが、個人的には、これに正規表現を使用したくありません。私は可能な限り物事を単純にすることを好みます。そのため、三項演算子を使用します。

// now (I'm posting at 03/05, so let's take this value)
var datev = new Date(); 

/* 
* here we will simply concatenate the value with a prefix "0" if the number
* is lower than 10. If not, concatenate the original value.
*/
var string_date = (datev.getMonth()+1 < 10 ? "0"+datev.getMonth()+1 : datev.getMonth()+1) + "/" + (datev.getDate() < 10 ? "0"+datev.getDate() : datev.getDate()); 

// display 03/05 instead of 3/5
console.log(string_date); 

このメソッドを追加して、トピックに多様性をもたらしたいと考えました。

: getMonth() は 0 ~ 11 の値を返すため、正しい値を取得するには、それに 1 を追加する必要があります。

于 2015-03-05T08:29:44.043 に答える
0

を使用せずに文字列を変更することはできませんreplace。正規表現に一致する日付を「正規化」できます。

var out = old
.replace(/^(\d\d?)[\/ -](\d\d?)[\/ -](\d{4})\s(\d\d?):(\d\d):(\d\d)(?:\s([AP]M))?/g
,function(x,m,d,y,h,i,s,a) {
    if( m.length == 1) m = "0"+m;
    if( d.length == 1) d = "0"+d;
    if( a == "PM") h = ""+((h%12)+12);
    if( a == "AM" && h == 12) h = "0";
    if( h.length == 1) h = "0"+h;
    return y+m+d+h+i+s;
});

今日の日付の場合、次のように返されます。

20121130141320

日付コンポーネントは最大から最小の順に並べ替えられます。つまり、単純な.sort()呼び出しで手間をかけずに正しい順序で日付を並べ替えることができます。

注: 正規表現を少し編集しましたが、それでも同じものと一致します。唯一の違いは、AM または PM がない場合、末尾のスペースが不要になったことです。

于 2012-11-30T19:13:50.320 に答える
0

文字列を Date オブジェクトに変換して比較するカスタムソート関数を呼び出すことはできますか?

類似: Javascript オブジェクト配列を日付でソート

于 2012-11-30T19:14:26.780 に答える