date-fns转换UTC至本地IST时区结果不符预期,求排查
问题分析与解决
你的代码核心问题是格式化时指定的时区为UTC,并未将UTC时间转换为印度孟买的IST时区,所以输出的仍是原始UTC时间,自然不会加上5小时30分钟的偏移量。
修正方案
将时区参数从"UTC"替换为孟买对应的标准时区标识符"Asia/Kolkata",或者自动读取运行机器的本地时区即可。
修正后的代码
const { parseISO, format, utcToZonedTime } = require("date-fns-tz"); // 需引入date-fns-tz扩展包 const time = "2023-03-07 06:27:06"; // UTC时间 const parsedTime = parseISO(time); const formatInTimeZone = (date, fmt, tz) => format(utcToZonedTime(date, tz), fmt, { timeZone: tz }); // 方案1:指定孟买时区 const formattedTime = formatInTimeZone( parsedTime, "dd-MMM-yyyy hh:mm a", "Asia/Kolkata" ); // 方案2:自动获取本地时区(适配任意机器) // const localTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone; // const formattedTime = formatInTimeZone(parsedTime, "dd-MMM-yyyy hh:mm a", localTimeZone); console.log(formattedTime); // 输出:07-Mar-2023 11:57 AM
关键说明
- 时区标识符:IST对应的标准时区ID是
"Asia/Kolkata",避免直接使用"IST",部分运行环境可能无法识别。 - 依赖要求:
utcToZonedTime是date-fns-tz扩展包提供的方法,需确保已安装并正确引入该包,仅date-fns本身不包含时区转换功能。
内容的提问来源于stack exchange,提问作者user5711656
相关产品推荐
相关产品推荐

