javascript - AngularJS: cómo convertir milisegundos a xHours e yMins
ng-bind-html-unsafe (8)
Tengo un requisito donde quiero convertir milisegundos a xHours y yMins en AngularJS.
Por ej. 3600000 debe mostrarse como 1h 0m.
Intenté usar la date:''H:m''
y la date:''HH:mm''
de los formatos de fecha en el sitio web de Angular.
Pero esos dan 19: 0 y 19:00 en lugar de 1h 0m.
Cualquier sugerencia de lograr esto será útil.
Gracias
Gracias. He modificado ligeramente tu filtro para devolver la duración en formato 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;
}
});
Hay un convertidor de fecha en AngularJS, simplemente configure el formato de fecha requerido:
{{milliseconds | date:''yyyy-MM-dd HH:mm''}}
También creé dicho filtro ''timeAgo'' usando la función jQuery timeago ():
.filter(''timeAgo'', function() {
return function(input) {
if (input == null) return "";
return jQuery.timeago(input);
};
})
Uso:
{{milliseconds | timeAgo}}
o utilizar juntos ambos formatos para la representación de fecha amplia:
<span>{{milliseconds | timeAgo}}, {{milliseconds | date:''yyyy-MM-dd HH:mm''}}</span>
Resultado:
12 minutes ago, 2015-03-04 11:38
Para cualquier persona que quiera tener separadores de coma (por ejemplo, ''21 días, 14 horas, 7 minutos ''):
''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;
};
});
Prueba este
var app = angular.module ( ''myApp'', [] ) ;
app.controller ( ''myController'', function ( $scope, $filter) {
$scope.date = $filter(''date'')(milliseconds, ''MM/dd/yyyy'');
});
Querrás usar objetos de duración moment''s .
Para hacer lo que quieras, prueba esto:
app.controller ''MainCtrl'', ($scope) ->
$scope.name = ''World''
$scope.milliseconds = 3600000
$scope.duration = moment.duration($scope.milliseconds)
Y el marcado
<body ng-controller="MainCtrl">
<p>Milliseconds: {{milliseconds}}</p>
<p>Duration: {{duration.hours()}}h {{duration.minutes()}}m</p>
</body>
Utilice la siguiente sintaxis
$filter(''date'')(dateObj, format)
p.ej
$filter(''date'')(1324339200000, ''dd/MM/yyyy'');
Vamos a hacer un filtro personalizado para esto, por ejemplo:
.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;
};
});
Entonces úsalo:
<div>{{ millSeconds | millSecondsToTimeString }}</div>
(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>