【问题标题】:moment.js in angular is not formatting as I would expect角度中的 moment.js 没有像我期望的那样格式化
【发布时间】:2016-08-16 06:20:45
【问题描述】:

我从服务器中提取了以下 JSON 格式的时间:

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

我正在使用带有以下过滤器的带有角度的 momentjs:

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

我希望得到以下输出:08:11 am。相反,我得到:04:04 am。我怀疑这可能与时区有关,但我不确定。我该如何解决这个问题?

【问题讨论】:

  • moment 是一个 js 库,而不是一个角度过滤器,如果您定义了一个名为 moment 的过滤器,它利用该库然后发布它的代码
  • 实际上 angular-moment 带有内置过滤器。我没有定义任何东西。

标签: angularjs momentjs angular-directive angular-moment


【解决方案1】:

MM 更改为 mm(月到分钟:))

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>

【讨论】:

    【解决方案2】:

    另一种选择。 JS 日期是一个 ISO 日期,所以我们只需要使用时刻转换方法来使用 JS 原生日期格式。这不需要您创建自定义格式化程序。

    {{myMomentDate.toISOString() | date: <your angular filter>}}
    

    【讨论】:

      猜你喜欢
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      • 2019-05-08
      • 1970-01-01
      • 1970-01-01
      • 2020-07-27
      • 2013-09-26
      • 2019-12-04
      相关资源
      最近更新 更多