Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular.js:秒到HH:mm:ss过滤器_Javascript_Angularjs_Date_Angularjs Filter - Fatal编程技术网

Javascript Angular.js:秒到HH:mm:ss过滤器

Javascript Angular.js:秒到HH:mm:ss过滤器,javascript,angularjs,date,angularjs-filter,Javascript,Angularjs,Date,Angularjs Filter,我有一个秒数,例如713秒。如何实现Angular.js过滤器,将713秒转换为HH:mm:ss格式?在这种情况下,应该是00:11:53 {{713 | secondsToHHMMSS} 尝试以下方法: app.filter('secondsToDateTime', [function() { return function(seconds) { return new Date(1970, 0, 1).setSeconds(seconds); }; }])

我有一个秒数,例如713秒。如何实现Angular.js过滤器,将713秒转换为HH:mm:ss格式?在这种情况下,应该是00:11:53


{{713 | secondsToHHMMSS}

尝试以下方法:

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

{{seconds | secondsToDateTime | date:'HH:mm:ss'}

我认为不需要定制过滤器

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

function Scoper($scope) {
    $scope.seconds = '79000';
    $scope.hours = parseInt($scope.seconds / 3600);
}
{{hours}{{seconds}日期:':mm:ss'}
函数作用域($scope){
$scope.seconds='79000';
$scope.hours=parseInt($scope.seconds/3600);
}

manzapanza的答案仅在秒数小于86400(1天)时有效。日期对象需要完全为零。另外,最好返回实际的日期对象,这样angularjs就不必再次创建它

app.filter('secondsToDateTime', function() {
    return function(seconds) {
        var d = new Date(0,0,0,0,0,0,0);
        d.setSeconds(seconds);
        return d;
    };
});

{{seconds | secondsToDateTime | date:'HH:mm:ss'}

编辑:如果希望小时数超过24小时而不换行为天,则最好不要使用日期:

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);
    };
});
app.filter('secondsToTime',function(){
函数padTime(t){
返回t<10?“0”+t:t;
}
返回函数(_秒){
if(typeof |秒!=“number”| |秒<0)
返回“00:00:00”;
var小时=数学地板(秒/3600),
分钟=数学地板((_秒%3600)/60),
秒=数学地板(_秒%60);
返回padTime(小时)+“:”+padTime(分钟)+“:”+padTime(秒);
};
});

{{seconds | secondsToTime}

由@manzapanza solution提供,为期天:

  $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)}}
app.filter('formatTimer',函数(){
返回函数(输入){
函数z(n){返回(n<10?'0':'')+n;}
var秒=输入%60;
var分钟=数学楼层(输入%3600/60);
var小时=数学楼层(输入/3600);
返回时间(z(小时)+':'+z(分钟)+':'+z(秒));
};
将输出:02:04:14

尝试以下操作:

app.filter('secondsToHHmmss',函数($filter){
返回功能(秒){
返回$filter('date')(新日期(0,0,0).setSeconds(秒),'HH:mm:ss');
};
})
html:

{{seconds | secondsToHHmmss}

自定义筛选器可能不是必需的,但当您在另一个页面上需要此逻辑时,使用筛选器或指令所需的最小额外时间投资就会得到回报。您可以将其保存在根范围中,但这是另一个您应该忽略的代码味道。我需要删除
[]
为了使这项工作正常,我在处理毫秒级的hanks时,将秒除以1000。刚刚修改。这里的“app”是什么?在
app.filter
中,我们应该将过滤器准确放置在哪里?@DanyY app是您的模块:var app=angular.module('myapp',[]);2年后->仍然优雅在互联网上时间无关紧要。这个答案帮助了我。谢谢。
<b>{{seconds | secondsToTime}}</b>
  $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)}}
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));
};