Angular.js:HH:mm:ss 过滤器的秒数
Angular.js: Seconds to HH:mm:ss filter
我有一些秒数,比如713秒。我怎样才能实现将这 713 秒转换为 HH:mm:ss 格式的 Angular.js 过滤器?在这种情况下,它应该是 00:11:53
<div>
{{ 713 | secondsToHHMMSS }} <!-- Should output 00:11:53 -->
</div>
尝试这样的事情:
app.filter('secondsToDateTime', [function() {
return function(seconds) {
return new Date(1970, 0, 1).setSeconds(seconds);
};
}])
html:
<b>{{seconds | secondsToDateTime | date:'HH:mm:ss'}}</b>
我认为没有必要自定义过滤器
<b>{{hours}}{{seconds | date:':mm:ss'}}</b>
function Scoper($scope) {
$scope.seconds = '79000';
$scope.hours = parseInt($scope.seconds / 3600);
}
manzapanza 的答案仅在秒数小于 86400(1 天)时有效。日期对象需要完全为零。另外,最好 return 实际的日期对象,这样 angularjs 就不必再做一次了。
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 而不换行到天数,最好不要使用日期:
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>
@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)}}
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
试试这个:
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>
我有一些秒数,比如713秒。我怎样才能实现将这 713 秒转换为 HH:mm:ss 格式的 Angular.js 过滤器?在这种情况下,它应该是 00:11:53
<div>
{{ 713 | secondsToHHMMSS }} <!-- Should output 00:11:53 -->
</div>
尝试这样的事情:
app.filter('secondsToDateTime', [function() {
return function(seconds) {
return new Date(1970, 0, 1).setSeconds(seconds);
};
}])
html:
<b>{{seconds | secondsToDateTime | date:'HH:mm:ss'}}</b>
我认为没有必要自定义过滤器
<b>{{hours}}{{seconds | date:':mm:ss'}}</b>
function Scoper($scope) {
$scope.seconds = '79000';
$scope.hours = parseInt($scope.seconds / 3600);
}
manzapanza 的答案仅在秒数小于 86400(1 天)时有效。日期对象需要完全为零。另外,最好 return 实际的日期对象,这样 angularjs 就不必再做一次了。
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 而不换行到天数,最好不要使用日期:
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>
@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)}}
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
试试这个:
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>