如何格式化大于24小时AngularJS的时间

时间:2017-03-23 17:39:39

标签: javascript angularjs momentjs time-format

我有一个十进制值,以分钟为单位,值 3361 ,需要按小时转换并以此格式显示: 56:01:00

我试过这段代码:

$scope.myTime = new Date(1970, 0, 1).setMinutes(3361);

<input type="text" class="form-control" ng-model="myTime | date:'HH:mm:ss'">

但结果不是我预期的结果: 08:01:00

4 个答案:

答案 0 :(得分:4)

我担心您无法使用角度date过滤器来实现所需内容。

您可以创建自定义过滤器(此处为angular official guide)并以您需要的格式构建结果。

例如,您可以使用moment.duration(3361, 'minutes');创建moment duration,然后使用moment-duration-format获取HH:mm:ss格式的持续时间。

这是一个完整的实例:

&#13;
&#13;
angular.module('MyApp', [])
.filter('durationFormat', function() {
  return function(input) {
    input = input || '';
    var out = '';
    var dur = moment.duration(input, 'minutes');
    return dur.format('HH:mm:ss');
  };
})
.controller('AppCtrl', function($scope) {
  $scope.myTime = 3361;
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.9/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/1.3.0/moment-duration-format.min.js"></script>

<div ng-app="MyApp" ng-controller="AppCtrl">
  {{ myTime | durationFormat }}
</div>
&#13;
&#13;
&#13;

获得相同输出的另一种方法是使用具有过滤器的angular-moment-duration-format来显示时刻持续时间。您可以使用amdCreate指定'minutes'单位来创建持续时间,然后使用amdFormat对其进行格式化。

这是一个例子:

&#13;
&#13;
angular.module('MyApp', ['angularDurationFormat'])
.controller('AppCtrl', function($scope) {
  $scope.myTime = 3361;
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.9/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/1.3.0/moment-duration-format.min.js"></script>
<script src="https://cdn.rawgit.com/vin-car/angular-moment-duration-format/0.1.0/angular-moment-duration-format.min.js"></script>

<div ng-app="MyApp" ng-controller="AppCtrl">
  {{ myTime | amdCreate:'minutes' | amdFormat:'HH:mm:ss' }}
</div>
&#13;
&#13;
&#13;

PS。我是angular-moment-duration-format的创建者。

答案 1 :(得分:1)

没有内置的AngularJS日期/时间过滤器可以完成您要显示的内容。

然而,你可以创建一个custom AngularJS filter来实现你想要的目标。

答案 2 :(得分:1)

% 60会给你几分钟的时间。然后你可以简单地减去并除以60得到小时数。

function minutesToHours(min) {
   var minutes = min % 60;
   var hours = (min-minutes)/60;
   minutes = minutes < 10 ? '0' + minutes : minutes;
   return hours+':'+minutes+':00';
}

console.log(minutesToHours(3361));

答案 3 :(得分:1)

尝试使用以下内容更改范围,并在控制器中添加$ filter

$scope.myTime = $filter('date')(new Date(1970, 0, 1).setMinutes(3361), 'HH:mm:ss');