2016-07-05 248 views
1

我问了一个关于通过Moment.js meridiem函数格式化AM/PM的问题。顺便说一句,我使用的版本2.9在Moment.js中格式化longDateFormat

我成功地加入时期的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"和返回时间将当前时间,但有一个大写的AM/PM

我需要返回当前时间,但一个输入格式应下午上午

在当下docs longDateFormat是一个对象不是函数我怎么会去格式化meridiem在这里?

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

下面是一个例子我的问题。

meridiem设置正常工作与一个h z输入。它是小写字母并有句点。 enter image description here

meridiem设置不会影响longDateFormat字符串。上午/下午总是大写,没有句点。无论我是否改变最初应用的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. 

感谢

+0

答案在你以前的问题:)。如果您使用[接受的答案](http://stackoverflow.com/a/38204712/4131048),您将始终有** a.m./p.m。**小写。如果您使用[我的答案](http://stackoverflow.com/a/38204793/4131048),您将有** a.m./p.m。**案件感知(取决于格式中的“a”或“A”)。如果你设置了'A'(反向默认逻辑),你的代码片段返回** AM/PM **,如果你指定格式为'a'并且** a.m./p.m。** – VincenzoC

+0

Hi @VincenzoC我没有关注你。即使设置了meridiem,longDateFormat也不正确。longDateFormat a返回一个始终大写的AM PM,不包含句点 – gwar9

+0

如果删除'meridiem'定制,会发生什么情况?在我看来,由于meridiem函数中的三元运算符,您将得到** AM/PM **大写。当格式包含小写'a'时,'isLowerCase'为'true',而当您使用大写'A'时,'isLowerCase'为'false'。删除'isLowerCase'检查应该可以解决您的问题。也许你可以添加一个片段,重现你的问题,进一步澄清你的问题。 – VincenzoC

回答

2

由于您使用的角度,你必须使用angular-moment采取内部指令和过滤器的优势瞬间。

角度矩提供了一个amDateFormat过滤器格式化日期使用了矩形.js格式()方法作为文档说。 下面的代码可以帮得到你的愿望:

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(); 
 
});
<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>

在你的榜样,你正在使用的角度默认date filter

+0

非常感谢文森佐,就像你回答我意识到我在使用angulars日期格式一样。角矩是一个很好的解决方案。谢谢你的帮助! – gwar9