angularjs - filtros - uppercase angular input
Angularjs segundos a filtro de tiempo (6)
Creo que no es necesario el filtro personalizado
<b>{{hours}}{{seconds | date:'':mm:ss''}}</b>
function Scoper($scope) {
$scope.seconds = ''79000'';
$scope.hours = parseInt($scope.seconds / 3600);
}
Estoy usando Angularjs.
Tengo una cadena de números, por ejemplo: 237
. Significa segundos. Necesito que cambie a: 2:34
o 3:42:54
.
Necesito segundos para filtrar el tiempo. ¿Cómo debería hacerlo?
Gracias.
La respuesta de manzapanza solo funciona si los segundos son menores que 86400 (1 día). El objeto de fecha debe ser completamente cero. Además, sería mejor devolver el objeto de fecha real para que angularjs no tenga que volver a hacerlo.
app.filter(''secondsToDateTime'', function() {
return function(seconds) {
var d = new Date(0,0,0,0,0,0,0);
d.setSeconds(seconds);
return d;
};
});
y
<b>{{seconds | secondsToDateTime | date:''HH:mm:ss''}}</b>
Editar: si quiere que las horas pasen por encima de 24 sin ajustar a días, es mejor no usar Fecha:
app.filter(''secondsToTime'', function() {
function padTime(t) {
return t < 10 ? "0"+t : t;
}
return function(_seconds) {
if (typeof _seconds !== "number" || _seconds < 0)
return "00:00:00";
var hours = Math.floor(_seconds / 3600),
minutes = Math.floor((_seconds % 3600) / 60),
seconds = Math.floor(_seconds % 60);
return padTime(hours) + ":" + padTime(minutes) + ":" + padTime(seconds);
};
});
y
<b>{{seconds | secondsToTime}}</b>
Prueba esto:
app.filter(''secondsToHHmmss'', function($filter) {
return function(seconds) {
return $filter(''date'')(new Date(0, 0, 0).setSeconds(seconds), ''HH:mm:ss'');
};
})
html:
<b>{{seconds | secondsToHHmmss}}</b>
Pruebe algo como esto:
app.filter(''secondsToDateTime'', [function() {
return function(seconds) {
return new Date(1970, 0, 1).setSeconds(seconds);
};
}])
html:
<b>{{seconds | secondsToDateTime | date:''HH:mm:ss''}}</b>
por @manzapanza solución por días:
$scope.duration_for = function(seconds){
if(!seconds) return
var duration = new Date(1970, 0, 1).setSeconds(seconds)
var mask = ''HH:mm''
if(seconds >= 86400){
mask = ''d days,'' + mask
}
return $filter(''date'')(duration, mask);
}
en vista:
{{duration_for(100500)}}
app.filter(''formatTimer'', function () {
return function (input) {
function z(n) { return (n < 10 ? ''0'' : '''') + n; }
var seconds = input % 60;
var minutes = Math.floor(input % 3600 / 60);
var hours = Math.floor(input / 3600);
return (z(hours) + '':'' + z(minutes) + '':'' + z(seconds));
};
saldrá: 02:04:14