如何使用`moment.js`从`月份号码'中获得'月份名称'

问题描述:

我在用于日期转换的angularjs应用程序中使用moment.js。我想打印Month number作为Month name。我曾尝试为波纹管,如何使用`moment.js`从`月份号码'中获得'月份名称'

<p>{{item.ReviewMonth | date : 'MMMM'}}</p> 
数量甲

其中item.ReviewMonth

ex-1。 <p>{{5 | date : 'MMMM'}}</p>其中5表示'May' ,但其打印january而不是May

ex-2。 <p>{{4 | date : 'MMMM'}}</p>其中4表示'April' ,但其打印january而不是April

如何从月份数中得到正确的月份名称?

+0

问题是,当你尝试使用NG-重复权发生的呢? –

+0

是的。我正在使用'ng-repeat'。 –

+0

检查此[link](http://stackoverflow.com/questions/31274581/get-month-name-from-two-digit-month-number)是否有帮助。 – anpsmn

这是因为当date过滤器试图5转换为Date对象,5将被识别为毫秒,将被转换为1970-01-01T00:00:00.005Z。然后date过滤器将返回January


解决方案:

moment('5', 'M').format('MMMM'); 

moment('05', 'MM').format('MMMM'); 

angular.module("app", []) 
 
    .controller("myCtrl", function($scope) { 
 
    $scope.testDate = 5; 
 
    $scope.testDate2 = new Date(5); 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="app" ng-controller="myCtrl"> 
 
    <span>{{testDate | date: 'MMMM'}}</span><br> 
 
    {{testDate2}} 
 
</div>

您可以从数月使用简单的JavaScript得到月份名称:

var monthNames = ["January", "February", "March", "April", "May", "June", 
    "July", "August", "September", "October", "November", "December" 
]; 

var month_number = 1; 
alert("The current month is " + monthNames[parseInt(month_number)+1]); 

,或者使用那一刻的js,你可以把它想:

var formattedMonth = moment('09', 'MM').format('MMMM'); // September 

moment(
    '09',   // Desired month 
    'MM'   // Tells MomentJs the number is a reference to month 
).format('MMMM') // Formats month as name 

请了一个月的名称简单的指令。

<!DOCTYPE html> 
<html> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 

<body> 

<div ng-app="myApp" ng-controller="myCtrl"> 

<any ng-repeat="x in item"> 
    <my-dir myindex="x.ReviewMonth"></my-dir> 
</any> 

</div> 

<script> 
var app = angular.module('myApp', []); 
app.controller('myCtrl', function($scope) 
{ 
    $scope.item = 
    [ 
     { 
      ReviewMonth:"9" 
     }, 
     { 
      ReviewMonth:"2" 
     }, 
     { 
      ReviewMonth:"3" 
     }, 
     { 
      ReviewMonth:"4" 
     }, 
     { 
      ReviewMonth:"5" 
     }, 
     { 
      ReviewMonth:"6" 
     }, 
     { 
      ReviewMonth:"7" 
     }, 
     { 
      ReviewMonth:"7" 
     } 
    ] 
}); 

app.directive('myDir', function() 
{ 
    return { 
    restrict: 'E', 
    scope: { 
     myindex: '=' 
    }, 
    template:'<div>{{myindex}}</div>', 
    link: function(scope, element, attrs) 
    { 
     var months = ["jan","feb","mar","apr","may","june","july","aug","sep","oct","nov","dec"]; 
     scope.myindex = months[scope.myindex]; 
    } 
    }; 
}) 
</script> 

</body> 
</html> 

如果要在角度视图内使用momentjs方法,可以使用angular-moment

对于您的情况,您可以使用amParse过滤器指定您的输入应解释为月份编号,然后您可以使用amDateFormat选择如何显示解析日期。

这里工作示例:

angular.module('MyApp',['angularMoment']) 
 
.controller('AppCtrl', function($scope) { 
 
    $scope.item = {}; 
 
    $scope.item.ReviewMonth = 5; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.9/angular.min.js"></script> 
 
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-moment/1.0.1/angular-moment.min.js"></script> 
 

 
<div ng-app="MyApp" ng-controller="AppCtrl"> 
 
    <p>{{item.ReviewMonth | amParse:'M' | amDateFormat:'MMMM'}}</p> 
 
</div>