能否将秒数以倒计时的形式进行格式化?例如,如果我有var seconds = 3662
,如何显示:1小时1分钟2秒
。
我尝试使用formatDistanceStrict(3662)
,但这只打印了小时:1小时
。
是否有内置的方法也能显示分钟和秒数?我不想写100行代码来实现这个(就像网络上的其他示例一样)。
能否将秒数以倒计时的形式进行格式化?例如,如果我有var seconds = 3662
,如何显示:1小时1分钟2秒
。
我尝试使用formatDistanceStrict(3662)
,但这只打印了小时:1小时
。
是否有内置的方法也能显示分钟和秒数?我不想写100行代码来实现这个(就像网络上的其他示例一样)。
import { formatDuration, intervalToDuration } from 'date-fns';
function humanDuration(time: number) {
return formatDuration(intervalToDuration({start: 0, end: time * 1000}));
};
humanDuration(463441); // 5 days 8 hours 44 minutes 1 second
你的意思是这样的吗?
const seconds = 3662,
formatCounter = s => {
let _s = s
const units = {day: 864e2, hour: 3600, minute: 60, second: 1},
str = Object
.entries(units)
.reduce((r, [unit, multiplier]) => {
if(_s >= multiplier){
const count = _s/multiplier|0,
tail = count > 1 ? 's' : ''
r.push([count, unit+tail])
_s = _s%multiplier
}
return r
}, [])
return str.flat().join(' ')
}
console.log(formatCounter(seconds))
console.log(formatCounter(416920))
function format(time) {
// Hours, minutes and seconds
var hrs = ~~(time / 3600);
var mins = ~~((time % 3600) / 60);
var secs = ~~time % 60;
// Output like "1:01" or "4:03:59" or "123:03:59"
var ret = "";
if (hrs > 0) {
ret += "" + hrs + " hour " + (mins < 10 ? "0" : "");
}
ret += "" + mins + " minutes " + (secs < 10 ? "0" : "");
ret += "" + secs + " seconds";
return ret;
}
console.log(format(3662));
就像这样简单:
const time = new Date(0,0,0)
time.setSeconds(3662)
console.log(time.getHours(),
time.getMinutes(),
time.getSeconds())
new Date(3662 * 1000)
来节省代码呢?或者使用Date(3662 * 1000).toTimeString().split(' ')[0]
。 - RobG