Javascript Angular.js:秒到HH:mm:ss过滤器
我有一个秒数,例如713秒。如何实现Angular.js过滤器,将713秒转换为HH:mm:ss格式?在这种情况下,应该是00:11:53Javascript 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 | 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));
};