Подтвердить что ты не робот

Angular.js: фильтр схемы секунд до времени

Я использую Angular.js, у меня есть строка чисел, которая представляет количество секунд (например: 610).

Мне нужен фильтр, который преобразует его во временную схему: 10:10 (10 минут и 10 секунд = 610 секунд).

Как мне это сделать?

4b9b3361

Ответ 1

Ответ на 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>

Ответ 2

Попробуйте что-то вроде этого:

app.filter('secondsToDateTime', [function() {
    return function(seconds) {
        return new Date(1970, 0, 1).setSeconds(seconds);
    };
}])

HTML:

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

Демо

Ответ 3

Попробуйте следующее:

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>

Ответ 4

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

Ответ 5

Я думаю, что необязательный пользовательский фильтр

<b>{{hours}}{{seconds | date:':mm:ss'}}</b>

function Scoper($scope) {
    $scope.seconds = '79000';
    $scope.hours = parseInt($scope.seconds / 3600);
}

Ответ 6

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