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

如何在Node.js中使用moment-timezone获取美国中部时区当前时间?

如何在Node.js(Azure Function)中正确获取美国中部时区的当前时间

你的问题出在直接返回moment实例,以及对moment-timezone的输出逻辑理解有误:

问题根源

当你直接返回moment()或moment().tz()创建的实例时,Azure Function会自动调用其toJSON()方法序列化,而moment的toJSON()默认返回UTC时区的ISO格式字符串,这就是你看到UTC时间的原因。

另外,你尝试的moment.tz(now, 'America/Chicago')写法虽然能转换时区,但本质和moment().tz('America/Chicago')效果一致,核心问题还是输出方式不对。

正确解决方案

要获取并返回美国中部时区的时间,需要:

  1. 正确创建目标时区的moment实例
  2. 使用format()方法将实例格式化为对应时区的字符串

修改后的Azure Function代码如下:

'use strict';

const moment = require('moment-timezone');

exports.handler = async (context, req) => {
    // 直接创建美国中部时区的当前时间实例(推荐写法)
    const chicagoTime = moment.tz('America/Chicago');

    // 格式化为你需要的字符串格式:
    // 带时区偏移的ISO格式示例:2022-11-28T22:11:07.744-06:00
    const formattedTime = chicagoTime.format('YYYY-MM-DDTHH:mm:ss.SSSZ');
    // 或者本地格式:2022-11-28 22:11:07
    // const formattedTime = chicagoTime.format('YYYY-MM-DD HH:mm:ss');

    return {
       statusCode: 200,
       headers: {'Content-Type': 'text/plain'}, // 修正Content-Type为标准值
       body: formattedTime
    };
}

关键说明

  • moment.tz('America/Chicago')是创建指定时区当前时间的最优写法,它直接在目标时区生成时间,避免先创建本地时间再转换的冗余步骤。
  • 必须通过format()方法输出自定义格式,才能得到对应时区的时间字符串;如果直接返回moment实例,必然会被序列化为UTC格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:05:19