按日期对Angularjs ng-repeat进行排序

时间:2016-09-13 13:21:19

标签: python html angularjs sorting

我对AngularJS比较陌生。可以使用一些帮助

我有一张包含以下信息的表

<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代码如下(在控制器连接之后)

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

在对名称进行排序时,这适用于升序和降序。

不幸的是,它在日期的情况下也是类似的(它按字母顺序排序,而不是按日期排序)。

我从后端(python)获取的日期格式采用以下格式:

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

我理解我犯的错误,但我无法找到解决方案。

我如何按日期排序?

先谢谢你们。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

正如您所注意到的,您收到的值是字符串的类型,因此按字母顺序排序。您需要事先将其转换为Date()。所以基本上你需要的是遍历你得到的数据数组,并用一个新的Date对象添加一个新属性(或替换现有的属性):

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

我刚刚检查过,JavaScript似乎解析格式“2016年9月13日”非常好。