在Moment.js中格式化longDateFormat

时间:2016-07-05 21:54:34

标签: javascript angularjs datetime momentjs

我之前问过一个关于通过Moment.js meridiem函数格式化AM / PM的问题。顺便说一下,我使用的是2.9版

我成功地将句点添加到AM / PM输入并使用此

应用小写
moment.locale('en', {
    meridiem: function(hour, minute, isLower) {
       if (hour < 12) {
          return isLower ? 'a.m.' : 'A.M.';
       } else {
          return isLower ? 'p.m' : 'P.M.';
       }
    }
});

现在我遇到了一个问题,我需要为longDateFormat字符串执行相同类型的格式化。

字符串为"h:mm:ss a",返回的时间为当前时间,但大写上午/下午

我需要返回当前时间,但输入格式应为 a.m. P.M。

目前docs longDateFormat是一个对象而不是函数我将如何在这里格式化meridiem?

******************** EDIT ****************

这是我的问题的一个例子。

meridiem设置正常工作,输入为h z。它是小写的并且有句号。 enter image description here

meridiem设置不会影响longDateFormat字符串。 am / pm始终为大写,没有句点。无论我是否更改了我最初应用的meridiem设置。我怎么能改变这个?

HTML enter image description here

{{last_update|date:"MMMM d, y 'at' h:mm:ss a"}}.

结果 enter image description here

Last updated on July 6, 2016 at 8:25:00 AM.

由于

1 个答案:

答案 0 :(得分:2)

由于您使用的是角度,因此您必须使用angular-moment来利用指令和过滤器内的时刻。

angular-moment提供了一个amDateFormat过滤器,使用moment.js format()方法格式化日期,正如文档所说。 以下代码可以帮助您获得所需内容:

&#13;
&#13;
angular.module('MyApp',['angularMoment'])
.run(function(){
  moment.locale('en', {
    meridiem: function(hour, minute, isLower) {
      if (hour < 12) {
         return isLower ? 'a.m.' : 'A.M.';
      } else {
         return isLower ? 'p.m.' : 'P.M.';
      }
    }
  });
})
.controller('AppCtrl', function($scope) {
  $scope.last_update = new Date();
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-moment/0.10.3/angular-moment.min.js"></script>

<div ng-app="MyApp" ng-controller="AppCtrl">
  With angular default date filter: <br/>
  {{last_update|date:"MMMM d, y 'at' h:mm:ss a"}}
  <br/>
  With angular-moment date filter: <br/>
  {{last_update|amDateFormat:'dddd, MMMM Do YYYY, h:mm:ss a'}}
  
</div>
&#13;
&#13;
&#13;

在您的示例中,您使用的是角度默认值date filter