st-table 将字符串转换为日期

st-table convert string to date

我将 json 对象数组绑定到 table。对象有一个日期列,它是日期格式但是字符串。我需要更改日期格式。

我试过了;

<tbody>
<tr ng-repeat="row in table_data">
  <td>{{row.availabledate | date:'MMMM dd, yyyy'}}</td>
</tr>
</tbody> 

但是,因为它是字符串,所以没有格式化。为了性能,我不想循环转换它。有没有办法将此字符串转换为日期,然后在 html 部分对其进行格式化?

一种方法是制作自己的过滤器,然后使用日期过滤器。

此 crude/raw 过滤器需要一个 YYYYMMDD 字符串并从中创建一个日期对象,然后您可以在该对象上使用 angular 的日期过滤器。

app.filter('strToDate', function() {

  return function(input) {
    var year        = input.substring(0,4);
    var month       = input.substring(4,6);
    var day         = input.substring(6,8);
    // Do filter work here

    return new Date(year,month,day);

  }

});

然后是

<td>{{row.availabledate | strToDate | date:'MMMM dd, yyyy'}}</td>

这是一个 Plunker link 的工作示例:https://plnkr.co/edit/hn5StpktiMLq2gWHAszu?p=preview

您也可以将过滤器 return 设置为格式化日期。

另一种方式,在过滤器内完成所有工作:

app.filter('strToDate', function($filter) {
 //1. date value
 //2. the format input by user
 return function(input, format) {
  //Create the date object
  var year        = input.substring(0,4);
  var month       = input.substring(4,6);
  var day         = input.substring(6,8);
  var newDate = new Date(year,month,day);
  // return the format selected
  return $filter('date')(newDate , format)
  }
});

您可以像这样使用过滤器:

<td>{{row.availabledate | strToDate :'MMMM dd, yyyy'}}</td>