You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 07:15:35