AngularJS - How do you convert milliseconds to xHours and yMins
Let make a custom filter for this, e.g:
.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;};});
Then use it:
<div>{{ millSeconds | millSecondsToTimeString }}</div>
There is date converter in AngularJS, just set required date format:
{{milliseconds | date:'yyyy-MM-dd HH:mm'}}
Also I created such 'timeAgo' filter using jQuery timeago() function:
.filter('timeAgo', function() { return function(input) { if (input == null) return ""; return jQuery.timeago(input); };})
Usage:
{{milliseconds | timeAgo}}
or use together both format for wide date representation:
<span>{{milliseconds | timeAgo}}, {{milliseconds | date:'yyyy-MM-dd HH:mm'}}</span>
Result:
12 minutes ago, 2015-03-04 11:38
You'll want to use moment's duration objects.
To do what you want, try this:
app.controller 'MainCtrl', ($scope) -> $scope.name = 'World' $scope.milliseconds = 3600000 $scope.duration = moment.duration($scope.milliseconds)
And the markup
<body ng-controller="MainCtrl"> <p>Milliseconds: {{milliseconds}}</p> <p>Duration: {{duration.hours()}}h {{duration.minutes()}}m</p></body>