Я использую Angular.js, у меня есть строка чисел, которая представляет количество секунд (например: 610
).
Мне нужен фильтр, который преобразует его во временную схему: 10:10
(10 минут и 10 секунд = 610 секунд).
Как мне это сделать?
Я использую Angular.js, у меня есть строка чисел, которая представляет количество секунд (например: 610
).
Мне нужен фильтр, который преобразует его во временную схему: 10:10
(10 минут и 10 секунд = 610 секунд).
Как мне это сделать?
Ответ на manzapanza работает только в том случае, если секунды меньше 86400 (1 день). Объект даты должен быть полностью нулевым. Кроме того, было бы лучше возвратить фактический объект даты, чтобы угловойам не приходилось повторять его.
app.filter('secondsToDateTime', function() {
return function(seconds) {
var d = new Date(0,0,0,0,0,0,0);
d.setSeconds(seconds);
return d;
};
});
и
<b>{{seconds | secondsToDateTime | date:'HH:mm:ss'}}</b>
Изменить: Если вы хотите, чтобы часы были выше 24 без упаковки в дни, лучше не использовать Date:
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);
};
});
и
<b>{{seconds | secondsToTime}}</b>
Попробуйте что-то вроде этого:
app.filter('secondsToDateTime', [function() {
return function(seconds) {
return new Date(1970, 0, 1).setSeconds(seconds);
};
}])
HTML:
<b>{{seconds | secondsToDateTime | date:'HH:mm:ss'}}</b>
Попробуйте следующее:
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>
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));
};
выйдет: 02:04:14
Я думаю, что необязательный пользовательский фильтр
<b>{{hours}}{{seconds | date:':mm:ss'}}</b>
function Scoper($scope) {
$scope.seconds = '79000';
$scope.hours = parseInt($scope.seconds / 3600);
}
by @manzapanza решение для дней:
$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);
}
в поле зрения:
{{duration_for(100500)}}