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

如何使用Moment.js将UTC时间转换为秒数(保留UTC时间)

解决Moment.js中UTC时间转对应秒数的问题

嘿,我完全get到你的需求了——你想要获取moment.utc(new Date()).format()输出的那个UTC时间对应的Unix秒数,而不是和本地时间挂钩的戳,对吧?

先澄清一个常见误区:你之前觉得moment.utc(new Date()).unix()不符合预期,其实是对Unix时间戳的理解偏差。Unix时间戳本身就是以UTC为基准的,它代表从1970-01-01T00:00:00Z开始流逝的秒数。你例子里得到的戳转成UTC时间,其实就是你要的2020-08-19T13:xx:xxZ,转成本地夏令时才会显示15:xx:xx,这是正常的。

不过如果你想更直接地拿到对应UTC时间的秒数,这里有两种靠谱的实现方式:

  • 方式一:用valueOf()转毫秒再转秒
    valueOf()会返回当前moment对象对应的UTC基准毫秒数,除以1000取整就是秒数:

    const utcMoment = moment.utc(new Date());
    const targetSeconds = Math.floor(utcMoment.valueOf() / 1000);
    // 验证:把秒数转回UTC时间,和utcMoment.format()一致
    moment.utc(targetSeconds, 'X').format(); // 输出你要的UTC时间字符串
    
  • 方式二:正确使用format('X')
    你之前误以为format('X')不符合需求,其实它返回的就是UTC基准的秒数。只要你是基于UTC的moment对象调用它,结果就对应那个UTC时间。比如:

    const utcSeconds = moment.utc(new Date()).format('X');
    // 同样,用moment.utc(parseInt(utcSeconds), 'X').format()验证,会得到你预期的UTC时间
    

另外,如果是从已知的UTC时间字符串出发,转成秒数也很简单:

const utcTimeStr = "2020-08-19T13:28:09Z";
const seconds = moment.utc(utcTimeStr).unix();
// 或者用valueOf()/1000,结果完全一致

核心点记住:只要你的moment对象是用moment.utc()创建的(确保是UTC时区),那unix()、format('X')或者valueOf()/1000得到的秒数,对应的UTC时间就是你看到的format()输出结果。之前的困惑大概率是因为你把秒数转成了本地时间来验证,而不是UTC时间~

内容的提问来源于stack exchange,提问作者xyz83242

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 21:12:40