2013-11-25 131 views
18

我有一個要求,我要在毫秒中轉換成AngularJS中的xHours和yMins。AngularJS - 你如何將毫秒轉換爲xHours和yMins

例如, 3600000應顯示爲1h 0m。

我嘗試在Angular的網站上使用date formatsdate:'H:m'date:'HH:mm'

但是那些給予19:0和19:00而不是1h 0m。

任何實現此目標的指針都會有所幫助。

謝謝

+3

您可以編寫自定義過濾器。 '日期'不用於顯示時間間隔。 – akonsu

回答

10

您會想要使用moment's持續時間對象。

做你想做什麼,試試這個:

app.controller 'MainCtrl', ($scope) -> 
    $scope.name = 'World' 
    $scope.milliseconds = 3600000 
    $scope.duration = moment.duration($scope.milliseconds) 

而且標記

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

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

30

讓我們做一個自定義過濾器對於這一點,如:

.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; 
}; 
}); 

然後使用它:

<div>{{ millSeconds | millSecondsToTimeString }}</div> 
11

有一個在AngularJS日期轉換器,只需設置所需的日期格式:

{{milliseconds | date:'yyyy-MM-dd HH:mm'}} 

此外,我使用jQuery TIMEAGO創建這樣的 'TIMEAGO' 濾波器()函數:

.filter('timeAgo', function() { 
    return function(input) { 
     if (input == null) return ""; 
     return jQuery.timeago(input); 
    }; 
}) 

用法:

{{milliseconds | timeAgo}} 

或一起使用這兩種格式的廣泛日期表示:

<span>{{milliseconds | timeAgo}}, {{milliseconds | date:'yyyy-MM-dd HH:mm'}}</span> 

結果:

12 minutes ago, 2015-03-04 11:38 
0

對於任何人誰希望有逗號分隔符(如'21天,14小時,7分鐘'):

'use strict'; 

angular.module('contests').filter('duration', function() { 
    return function(milliseconds) { 
     var seconds = Math.floor(milliseconds/1000); 
     var days = Math.floor(seconds/86400); 
     var hours = Math.floor((seconds % 86400)/3600); 
     var minutes = Math.floor(((seconds % 86400) % 3600)/60); 
     var dateTimeDurationString = ''; 
     if ((days > 0) && (hours === 0 && minutes === 0)) dateTimeDurationString += (days > 1) ? (days + ' days ') : (days + ' day '); 
     if ((days > 0) && (hours > 0 || minutes > 0)) dateTimeDurationString += (days > 1) ? (days + ' days, ') : (days + ' day, '); 
     if ((hours > 0) && (minutes > 0)) dateTimeDurationString += (hours > 1) ? (hours + ' hours, ') : (hours + ' hour, '); 
     if ((hours > 0) && (minutes === 0)) dateTimeDurationString += (hours > 1) ? (hours + ' hours ') : (hours + ' hour '); 
     if (minutes > 0) dateTimeDurationString += (minutes > 1) ? (minutes + ' minutes ') : (minutes + ' minute '); 
     return dateTimeDurationString; 
    }; 
}); 
4

謝謝。我稍微修改了你的過濾器,以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; 
    } 
}); 
0

試試這個

var app = angular.module ('myApp', []) ; 
app.controller ('myController', function ($scope, $filter) { 
    $scope.date = $filter('date')(milliseconds, 'MM/dd/yyyy'); 
}); 
+0

雖然此代碼可能會回答問題,但提供有關* why *和/或* how *此代碼如何回答問題的其他上下文可提高其長期價值。 –

0
(function() { 
    'use strict'; 

    angular 
     .module('module_name') 
     .filter('secondsToDateTime', secondsToDateTime); 

    function secondsToDateTime() { 
     return function(seconds) { 
      return new Date(1970, 0, 1).setSeconds(seconds); 
     }; 
    } 
})(); 


<span>{{seconds | secondsToDateTime | date:'HH:mm:ss'}}</span> 
0

以下語法使用

$filter('date')(dateObj, format) 

例如

$filter('date')(1324339200000, 'dd/MM/yyyy');