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

如何通过偏移量获取时区名称?用Moment.js筛选当地为10点的时区ID

使用Moment.js处理时区相关需求

1. 通过偏移量获取时区名称

首先要明确:同一个偏移量可能对应多个时区,而且多数时区会受夏令时调整影响,同一时区在不同时间点的偏移量可能发生变化。因此建议结合具体时间点来匹配偏移量对应的时区。

你需要借助moment-timezone插件(需单独安装)实现,步骤如下:

  • 遍历所有已知的时区ID
  • 针对指定时间,获取该时区的偏移量
  • 筛选出偏移量匹配的时区

示例代码:

// 引入依赖
const moment = require('moment-timezone');

function getTimezonesByOffset(targetOffsetSeconds, targetTime = moment.utc()) {
  // 获取所有时区ID列表
  const allTimezones = moment.tz.names();
  // 筛选符合偏移量的时区
  return allTimezones.filter(timezone => {
    // 获取该时区在目标时间的偏移量(单位:秒)
    const offset = moment.tz(targetTime, timezone).utcOffset() * 60;
    return offset === targetOffsetSeconds;
  });
}

// 示例:获取UTC当前时间下,偏移量为+9小时(32400秒)的时区
const targetOffset = 9 * 60 * 60;
const matchingTimezones = getTimezonesByOffset(targetOffset);
console.log(matchingTimezones);

2. 获取当地时间为上午10点的时区ID列表

以你提到的场景为例:当UTC时间为凌晨1点时,找出所有当地时间为上午10点的时区。核心思路是遍历所有时区,检查该时区在目标UTC时间下的当地时间是否为10点整。

示例代码:

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

function getTimezonesWithLocalTime(targetHour, targetUtcTime = moment.utc()) {
  const allTimezones = moment.tz.names();
  return allTimezones.filter(timezone => {
    const localTime = moment.tz(targetUtcTime, timezone);
    // 检查小时是否为目标值,且分钟、秒为0(确保是整点)
    return localTime.hours() === targetHour && localTime.minutes() === 0 && localTime.seconds() === 0;
  });
}

// 示例:UTC时间为2024-05-20 01:00:00时,获取当地时间为10点的时区
const targetUtc = moment.utc('2024-05-20T01:00:00');
const timezonesAt10Am = getTimezonesWithLocalTime(10, targetUtc);
console.log(timezonesAt10Am);

注意事项

  • 必须先安装moment-timezone插件:npm install moment-timezone
  • 时区偏移量会受夏令时影响,务必结合具体时间点判断,不能仅靠固定偏移量筛选
  • moment.utcOffset()返回值为分钟数,需要转换为秒数再与目标偏移量匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 22:52:32