AngularJS - 如何将毫秒转换为xHours和yMins

Pri*_*ish 18 javascript date-format date-formatting angularjs

我有一个要求,我希望将毫秒转换为AngularJS中的xHours和yMins.

对于前者 3600000应显示为1h 0m.

我尝试使用date:'H:m',并date:'HH:mm'日期格式对角的网站.

但那些给出19:0和19:00而不是1h 0m.

任何实现这一目标的指示都会有所帮助.

谢谢

hao*_*ang 31

让我们为此制作一个自定义过滤器,例如:

.filter('millSecondsToTimeString', function() {
  return function(millseconds) {
    var oneSecond = 1000;
    var oneMinute = oneSecond * 60;
    var oneHour = oneMinute * 60;
    var oneDay = oneHour * 24;

    var seconds = Math.floor((millseconds % oneMinute) / oneSecond);
    var minutes = Math.floor((millseconds % oneHour) / oneMinute);
    var hours = Math.floor((millseconds % oneDay) / oneHour);
    var days = Math.floor(millseconds / oneDay);

    var timeString = '';
    if (days !== 0) {
        timeString += (days !== 1) ? (days + ' days ') : (days + ' day ');
    }
    if (hours !== 0) {
        timeString += (hours !== 1) ? (hours + ' hours ') : (hours + ' hour ');
    }
    if (minutes !== 0) {
        timeString += (minutes !== 1) ? (minutes + ' minutes ') : (minutes + ' minute ');
    }
    if (seconds !== 0 || millseconds < 1000) {
        timeString += (seconds !== 1) ? (seconds + ' seconds ') : (seconds + ' second ');
    }

    return timeString;
};
});
Run Code Online (Sandbox Code Playgroud)

然后使用它:

<div>{{ millSeconds | millSecondsToTimeString }}</div>
Run Code Online (Sandbox Code Playgroud)


Dmi*_*zin 11

AngularJS中有日期转换器,只需设置所需的日期格式:

{{milliseconds | date:'yyyy-MM-dd HH:mm'}}
Run Code Online (Sandbox Code Playgroud)

我还使用jQuery timeago()函数创建了这样的'timeAgo'过滤器:

.filter('timeAgo', function() {
    return function(input) {
        if (input == null) return "";
        return jQuery.timeago(input);
    };
})
Run Code Online (Sandbox Code Playgroud)

用法:

{{milliseconds | timeAgo}}
Run Code Online (Sandbox Code Playgroud)

或同时使用两种格式进行广泛的日期表示:

<span>{{milliseconds | timeAgo}}, {{milliseconds  | date:'yyyy-MM-dd HH:mm'}}</span>
Run Code Online (Sandbox Code Playgroud)

结果:

12 minutes ago, 2015-03-04 11:38
Run Code Online (Sandbox Code Playgroud)


cod*_*sky 10

你会想要使用时刻的持续时间对象.

要做你想做的,试试这个:

app.controller 'MainCtrl', ($scope) ->
    $scope.name = 'World'
    $scope.milliseconds = 3600000
    $scope.duration = moment.duration($scope.milliseconds)
Run Code Online (Sandbox Code Playgroud)

和标记

<body ng-controller="MainCtrl">
  <p>Milliseconds: {{milliseconds}}</p>
  <p>Duration: {{duration.hours()}}h {{duration.minutes()}}m</p>
</body>
Run Code Online (Sandbox Code Playgroud)

plunkr:http://plnkr.co/edit/2HL75Tmr4CoAy5R9smkx


Vau*_*ghn 5

谢谢。我稍微修改了您的过滤器,以 hh:mm:ss 格式返回持续时间。

.filter('duration', function() {
    //Returns duration from milliseconds in hh:mm:ss format.
      return function(millseconds) {
        var seconds = Math.floor(millseconds / 1000);
        var h = 3600;
        var m = 60;
        var hours = Math.floor(seconds/h);
        var minutes = Math.floor( (seconds % h)/m );
        var scnds = Math.floor( (seconds % m) );
        var timeString = '';
        if(scnds < 10) scnds = "0"+scnds;
        if(hours < 10) hours = "0"+hours;
        if(minutes < 10) minutes = "0"+minutes;
        timeString = hours +":"+ minutes +":"+scnds;
        return timeString;
    }
});
Run Code Online (Sandbox Code Playgroud)