2016-09-13 40 views
0

AngularJSは比較的新しいです。Angularjsの日付順の並べ替え

$scope.sortType = ''; 
$scope.sortReverse = false; 

私は(コントローラ接続後)、次のように次の情報

<table> 
<tr> 
    <th><span ng-click="sortType = 'first_name'; sortReverse = !sortReverse">Referral Name</span></th> 
    <th><span ng-click="sortType = 'date'; sortReverse = !sortReverse">Referral Name</span></th> 
</tr> 
<tr ng-repeat="x in referral | orderBy:sortType:sortReverse"> 
    <td>name</td> 
    <td>date</td> 
</tr> 
</tabe> 

とJSコードを持つテーブルがある持っているいくつかの助け

を使用することができますこれは、昇順と降順のために完璧に動作します名前をソートするとき。

残念ながら日付の場合も同様です(日付ではなくアルファベット順にソートされています)。

私はバックエンド(パイソン)から取得しています日付形式がこの形式である:

i["date"] = i["date"].strftime("%B %d, %Y") 
September 13, 2016 <-- this format 

私は私が作った間違いを理解し、私はそれのための解決策を見つけることができないのです。

日付でソートするにはどうすればよいですか?

ありがとうございました。

+0

理想的には、['Date'](https://developer.mozilla.org)/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)をjavascriptに追加し、それを表示するためにangleの[日付フィルタ](https://docs.angularjs.org/api/ng/filter/date)を使用します。それが簡単な場合は、タイムスタンプやISOフォーマットの日付文字列を送信することができます。また、日付フィルタはそれをうまく処理します(自分でJavascript Dateに変換する必要はありません)。 – mgilson

答えて

1

理想的には、日付のソート可能なオブジェクトがあります。 1つの候補はアイソフォーマットされた日付です。

i["date"] = i["date"].isoformat() 

ソートはうまくいくはずですが、うまく表示されます。したがって、UIでフォーマットするには、日付フィルタを使用する必要があります:

<table> 
<tr> 
    <th><span ng-click="sortType = 'first_name'; sortReverse = !sortReverse">Referral Name</span></th> 
    <th><span ng-click="sortType = 'date'; sortReverse = !sortReverse">Referral Name</span></th> 
</tr> 
<tr ng-repeat="x in referral | orderBy:sortType:sortReverse"> 
    <td>name</td> 
    <td>{{x.date | date : 'MMMM d, yyyy'}}</td> 
</tr> 
</table> 
+0

あなたは救い主です..ありがとう、mgilson! –

0

お気づきのように、受け取る値は文字列の型で、アルファベット順にソートされています。あらかじめDate()に変換する必要があります。だから、基本的には何が必要あなたが得たデータの配列をループにし、新しいプロパティを追加します(または1つを、既存の置き換え)新しいDateオブジェクトで:

referral.forEach((ref) => { 
    ref.date_obj = new Date(ref.date) 
}; 

私はちょうどチェックし、JavaScriptは「フォーマットを解析しているようです2016年9月13日「かなり良い。

+0

しかし、これは、 'Date'がISO以外のどのようなフォーマットを本当によく標準化していないので、かなりブラウザ依存である可能性があります。 – mgilson

+0

その後、日付文字列を手動で再フォーマットして、 "2016-09-13"にすることができます。しかし、代わりにバックエンドのリターンフォーマットを変更する方がはるかに簡単だと思います。 – EternalLight

関連する問題