如何在NodeJS中实现终端控制台单行刷新显示的实时时钟
Node.js 终端单行刷新实时时钟实现方案
核心实现逻辑
- 不要使用
console.log输出,该方法默认会在内容末尾追加换行符,导致每次输出都新起一行 - 使用Node.js内置的
process.stdout.write()方法输出内容,该方法不会自动追加换行符 - 输出时间字符串前追加回车符
\r,可以将光标移动到当前行的行首,新输出的内容会直接覆盖原有行的内容,实现单行刷新效果
完整实现代码
function showTime() { const d = new Date(); // 补零处理,Node.js >=8.10.0 支持padStart写法 const h = String(d.getHours()).padStart(2, '0'); const m = String(d.getMinutes()).padStart(2, '0'); const s = String(d.getSeconds()).padStart(2, '0'); // 开头加\r回到行首,末尾不加换行 process.stdout.write(`\r${h}:${m}:${s}`); } // 首次调用立刻显示时间,避免第一秒空白 showTime(); // 每秒刷新一次 setInterval(showTime, 1000); // 可选:监听Ctrl+C退出事件,退出前输出换行,避免终端提示符和时间内容粘连 process.on('SIGINT', () => { process.stdout.write('\n'); process.exit(); });
如果使用低版本Node.js不支持padStart方法,可以替换补零逻辑:
const h = ("0" + d.getHours()).substr(-2); const m = ("0" + d.getMinutes()).substr(-2); const s = ("0" + d.getSeconds()).substr(-2);
内容的提问来源于stack exchange,提问作者Adam Satria Gunadi
相关产品推荐
相关产品推荐

