我对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
我理解我犯的错误,但我无法找到解决方案。
我如何按日期排序?
先谢谢你们。
答案 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日”非常好。