如何用JavaScript或NPM包将MSK时间转换为SST时间
将莫斯科标准时间(MSK)转换为新加坡标准时间(SST)
下面提供两种无需额外依赖的原生JavaScript方案,以及两款常用NPM包的实现方式,按需选择即可:
方案一:原生JavaScript(无额外依赖)
由于API仅返回时间部分,需先补充基准日期(示例用当前日期,也可指定固定日期),再通过时区偏移或Intl API完成转换:
// 输入的MSK时间字符串 const mskTimeStr = "07:00 PM"; // 拼接基准日期(这里取当前日期,可替换为目标日期) const baseDate = new Date().toISOString().split('T')[0]; // 构建带MSK时区偏移的完整日期时间字符串(MSK为UTC+3,当前无夏令时) const mskFullStr = `${baseDate}T${mskTimeStr.replace(' ', '')}+03:00`; // 转换为新加坡时区并格式化输出 const sstTime = new Date(mskFullStr).toLocaleTimeString('en-US', { timeZone: 'Asia/Singapore', hour12: true, hour: '2-digit', minute: '2-digit' }); console.log(sstTime); // 输出示例:"12:00 AM"(MSK 19:00 +5小时=次日SST 00:00)
方案二:使用moment-timezone(直观的时区处理)
先安装依赖:
npm install moment moment-timezone
转换代码:
const moment = require('moment-timezone'); const mskTimeStr = "07:00 PM"; // 解析为MSK时区时间,自动补充当前日期 const mskMoment = moment.tz(mskTimeStr, 'hh:mm A', 'Europe/Moscow'); // 转换为新加坡时区并格式化 const sstTime = mskMoment.tz('Asia/Singapore').format('hh:mm A'); console.log(sstTime); // 输出示例:"12:00 AM"
方案三:使用date-fns-tz(轻量替代方案)
先安装依赖:
npm install date-fns date-fns-tz
转换代码:
const { format, parse, zonedTimeToUtc, utcToZonedTime } = require('date-fns-tz'); const mskTimeStr = "07:00 PM"; const mskZone = 'Europe/Moscow'; const sstZone = 'Asia/Singapore'; // 解析MSK时区的时间(补充当前日期) const mskDate = parse(mskTimeStr, 'hh:mm a', new Date(), { timeZone: mskZone }); // 转换为新加坡时区 const sstDate = utcToZonedTime(zonedTimeToUtc(mskDate, mskZone), sstZone); // 格式化输出 const sstTime = format(sstDate, 'hh:mm a', { timeZone: sstZone }); console.log(sstTime); // 输出示例:"12:00 AM"
注意:若API返回的时间对应特定日期,只需将代码中的基准日期替换为目标日期即可。
内容的提问来源于stack exchange,提问作者Nasyx Nadeem
相关产品推荐
相关产品推荐

