2017-05-05 105 views
4

我在用於日期轉換的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

回答

3

這是因爲當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>

1

您可以從數月使用簡單的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 
0

請了一個月的名稱簡單的指令。

<!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> 
1

如果要在角度視圖內使用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>