如何在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')效果一致,核心问题还是输出方式不对。
正确解决方案
要获取并返回美国中部时区的时间,需要:
- 正确创建目标时区的moment实例
- 使用
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
相关产品推荐
相关产品推荐

