为何moment()输出的秒数不递增?Node.js技术咨询
问题:Moment.js循环打印时间秒数未递增
我是NodeJS新手,若问题过于简单还请见谅。我在Windows 10和Ubuntu系统中运行以下使用moment库的代码,循环打印格式化时间,但输出的秒数并未递增。
代码
var moment = require('moment') for(let step = 0; step < 5; step++ ) { console.log(moment().format('DDMMYYYY-hhmmss')); }
实际输出
C:\Users\sathish>node form.js 23122022-045601 23122022-045601 23122022-045601 23122022-045601 23122022-045601
预期输出
23122022-045601 23122022-045602 23122022-045603 23122022-045604 23122022-045605
问题原因
循环执行速度极快,所有moment()调用几乎都在同一毫秒内完成,因此获取到的时间戳完全一致,格式化后的秒数自然不会变化。
解决方法
方法1:基于初始时间累加秒数
不需要等待真实时间流逝,直接以初始时间为基准,每次循环给时间加1秒:
var moment = require('moment') // 记录初始时间 const startTime = moment(); for(let step = 0; step < 5; step++ ) { // 克隆初始时间对象并累加对应秒数,避免修改原对象 console.log(startTime.clone().add(step, 'seconds').format('DDMMYYYY-hhmmss')); }
方法2:等待真实时间间隔打印
如果需要模拟真实的时间流逝,用定时器替代同步循环,每隔1秒打印一次:
var moment = require('moment') let step = 0; const timer = setInterval(() => { console.log(moment().format('DDMMYYYY-hhmmss')); step++; // 达到5次后停止定时器 if (step >= 5) { clearInterval(timer); } }, 1000);
内容的提问来源于stack exchange,提问作者Sathish Kumar
相关产品推荐
相关产品推荐

