角度JS过滤日期

angularJS filter date

本文关键字:日期 过滤 JS 角度      更新时间:2023-09-26

我正在尝试使用过滤器来过滤掉字符串的日期。我从 API 获得的日期是

"/Date(1418716652000+0000)/"

有一个函数可以将日期转换为我想要的类型:

1418716652000

函数为:

$scope.convertDate = function(published_first) {
    var date = (published_first.match(/'(.*')/, ''));
    var convertedDate = date[0];
    date = eval(convertedDate.replace(/'//g,''));
    return date;
}

我的HTML是:

<div id ="news" ng-repeat="new in news | filter:convertDate">
  <h3 class="title" ng-repeat="n in new">
  <span>{{n.title}}</span><br/>
  <div class="title-data">              
    <span ng-if="n.byline.length > 0">by: {{n.byline}}</span>
    <br/>
    <span>
    <span>published: {{n.published_first | date:'medium'}}</span><br/>
    </span>
</div>  

我一直在尝试将其作为 ng-repeatdiv 中的 HTML 中的过滤器运行,但它不起作用。我还尝试在同一跨度中运行过滤器,其中包括角度日期:"中等"过滤器。那也行不通。有人可以帮助解决我所缺少的问题吗?

您正在使用的 API 似乎为您提供了具有 published_first 属性的新闻对象,该属性采用您希望以不同的方式呈现的传输格式,但该数据在收到后不会在运行时更改。

在任何类型的手表中将标记转换为过滤器或函数意味着您不断转换触发摘要的每个事件的日期。最好从接收新闻项的控制器或服务运行 convertDate(( 函数,并在从 API 接收每个项时对每个项进行转换。在这种情况下,每个新闻项仅执行一次从字符串到日期的转换,然后您的标记变为:

<span>published: {{n.published_first | date:'medium'}}</span>

此外,如果您可以确保来自 API 的格式始终保持一致(它应该一致(,则可以使用以下一行将转换为时间戳:

$scope.convertDate = function(published_first) {
    return parseInt(published_first.substr(6), 10); 
}

该行删除 /Date(( 的初始非数字字符,并根据精度解析为第一个非数字字符,该字符将是 + 或 (。

1( 创建一个如下所示的过滤器函数。

module.filter('convertDate', function() {
  return function(published_first) {
    var date = (published_first.match(/'(.*')/, ''));
    var convertedDate = date[0];
    date = eval(convertedDate.replace(/'//g,''));
    return date;
  };
})

2( 使用过滤器设置日期格式:

<div id ="news" ng-repeat="new in news">
  <h3 class="title" ng-repeat="n in new">
  <span>{{n.title}}</span><br/>
  <div class="title-data">              
    <span ng-if="n.byline.length > 0">by: {{n.byline}}</span>
    <br/>
    <span>
    <span>published: {{n.published_first | convertDate | date:'medium'}}</span><br/>
    </span>
</div>  

尽可能避免使用过滤器。 过滤器在大型应用中可能会导致巨大的性能问题。

也就是说,由于您将函数放在作用域上,因此可以在标记中使用它:

<span>published: {{convertDate(n.published_first) | date:'medium'}}</span><br/>