如何使用momentjs和angularjs将日期转换为星期几

时间:2015-03-05 23:55:16

标签: angularjs momentjs

我的json中有这种格式的日期 " 2015年2月26日00:00:00"我希望将其转换为星期几,即星期二 使用momentjs这似乎很简单,但我的问题是如何调用html内的momentjs format()方法与< script>内部 我想我可以在脚本中创建一个新的json字符串,但是想避免那个

<!DOCTYPE html>
<html>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
  <body ng-app="test" ng-controller="test">
    <table>
    <tr><th>day</th><th>value</th></tr>
    <tr ng-repeat="tsval in data['key']">
      <td>{{tsval.timestamp }}</td>
      <td>{{ tsval.val }}</td>
    </tr>
    </table>
  </body>
   <script>
angular.module('test', []).controller('test', function($scope) {
  $scope.data = {
      'key':[
        {
            'timestamp':'26 Feb 2015 00:00:00 GMT',
            'val':'v1'
        },
        {
            'timestamp':'27 Feb 2015 00:00:00 GMT',
            'val':'v2'
        },
        {
            'timestamp':'28 Feb 2015 00:00:00 GMT',
            'val':'v3'
        }
      ]
    };
});
    </script>
</html>

2 个答案:

答案 0 :(得分:3)

这是一个包装moment().format()

的自定义过滤器

&#13;
&#13;
angular.module('myApp', [])
.controller('myCtrl', function($scope) {
  $scope.myDate = '28 Feb 2015 00:00:00 GMT'; 
})
.filter('format', function() {
  return function(input, format) {
    return moment(new Date(input)).format(format);
  };
})
;
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js"></script>

<div ng-app="myApp" ng-controller="myCtrl">
  <p>{{myDate | format:'ddd'}}</p>
</div>
&#13;
&#13;
&#13;

您也可以使用内置在date过滤器中的Angular,但它不喜欢您的日期格式,因此您必须应用其他过滤器来转换它首先是ISO字符串。如果你出于任何其他原因不需要时刻,我会摆脱它而只是这样做。

&#13;
&#13;
angular.module('myApp', [])
.controller('myCtrl', function($scope) {
  $scope.myDate = '28 Feb 2015 00:00:00 GMT'; 
})
.filter('dateToISO', function() {
  return function(input) {
    return new Date(input).toISOString();
  };
})
;
&#13;
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js"></script>

<div ng-app="myApp" ng-controller="myCtrl">
  <p>{{myDate | dateToISO | date:'EEE'}}</p>
</div>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

只需将一个辅助函数添加到范围内,即将提供的日期格式化为一天。

angular.module('test', []).controller('test', function($scope) {
  $scope.data = {
    'key': [{
      'timestamp': '26 Feb 2015 00:00:00 GMT',
      'val': 'v1'
    }, {
      'timestamp': '27 Feb 2015 00:00:00 GMT',
      'val': 'v2'
    }, {
      'timestamp': '28 Feb 2015 00:00:00 GMT',
      'val': 'v3'
    }]
  };

  $scope.toDay = function(date) {
    return moment(date).format('ddd');
  };
});

在你的模板中,关闭助手并将日期作为参数传递。

<td>{{ toDay(tsval.timestamp) }}</td>

这呈现:

day value
Wed v1
Thu v2
Fri v3

这里是plunker