如何使用`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
。
如何从月份数中得到正确的月份名称?
答
这是因为当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>
问题是,当你尝试使用NG-重复权发生的呢? –
是的。我正在使用'ng-repeat'。 –
检查此[link](http://stackoverflow.com/questions/31274581/get-month-name-from-two-digit-month-number)是否有帮助。 – anpsmn