Момент.js в угловой не форматирование, как я ожидал

У меня есть время, извлекаемое с сервера в следующем формате JSON:

"begins_at":"2016-04-22T08:11:07.000Z"

Я использую моменты с угловой со следующим фильтром:

{{event_details.begins_at | moment: "format": "HH:MM a"}}

Я ожидал бы следующий вывод: 08:11 am, Вместо этого я получаю: 04:04 am, Я подозреваю, что это может быть как-то связано с часовыми поясами, но я не уверен. Как это исправить?

2 ответа

Решение

Измените ММ на мм (от месяцев до минут:))

angular.module('app', [])
  .provider('moment', function() {  // be nice for DI
    this.$get = function() {
      return moment
    }
  })
  .controller('ctrl', function() {
    this.event_details = {
      begins_at: '2016-04-22T08:11:07.000Z'
    }
  })
  .filter('moment', function(moment) {
    return function(input, options) {
      return moment(input).format(options.split('\'')[1]) // ugly formatter ; (
    }
  })
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>


<div ng-app='app'>
  <div ng-controller='ctrl as c'>
    moment: {{ c.event_details.begins_at | moment:"format: 'HH:mm a'" }}
  </div>
</div>

Альтернатива. Дата JS - это дата ISO, поэтому нам просто нужно использовать метод преобразования моментов, чтобы использовать форматирование даты в JS. Для этого не требуется создавать собственный форматтер.

{{myMomentDate.toISOString() | date: <your angular filter>}}
Другие вопросы по тегам