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

为何getUTCMinutes()方法在不同地区返回不同分钟值?

问题:OpenWeather API获取的本地时间分钟数异常

我从OpenWeather API拿数据,想展示不同城市的本地日期和时间。其他部分都正常,但换不同城市时,分钟数会出问题,为啥getUTCMinutes()方法显示的结果不对?

代码示例

const localMinutes = new Date((data.dt + data.timezone) * 1000).getUTCMinutes()

示例JSON数据

{
  "coord": {
    "lon": 10.99,
    "lat": 44.34
  },
  "weather": [
    {
      "id": 501,
      "main": "Rain",
      "description": "moderate rain",
      "icon": "10d"
    }
  ],
  "base": "stations",
  "main": {
    "temp": 298.48,
    "feels_like": 298.74,
    "temp_min": 297.56,
    "temp_max": 300.05,
    "pressure": 1015,
    "humidity": 64,
    "sea_level": 1015,
    "grnd_level": 933
  },
  "visibility": 10000,
  "wind": {
    "speed": 0.62,
    "deg": 349,
    "gust": 1.18
  },
  "rain": {
    "1h": 3.16
  },
  "clouds": {
    "all": 100
  },
  "dt": 1661870592,
  "sys": {
    "type": 2,
    "id": 2075663,
    "country": "IT",
    "sunrise": 1661834187,
    "sunset": 1661882248
  },
  "timezone": 7200,
  "id": 3163858,
  "name": "Zocca",
  "cod": 200
}
原因和解决办法

问题出在哪

你把dt(UTC时间戳,单位秒)和timezone(时区偏移秒数)相加后,得到的是本地时间对应的UTC时间戳,但你用getUTCMinutes()取的是这个时间戳的UTC分钟数,不是本地时间的分钟数。

举个实际例子:

  • 示例里dt=1661870592对应的UTC时间是2022-08-30 15:23:12
  • 加上timezone=7200(UTC+2小时),得到的时间戳是1661877792,对应的UTC时间是2022-08-30 17:23:12,这时候getUTCMinutes()拿的是23,看起来没问题,但那是因为这个时区偏移是整小时。

如果换个时区偏移带30分钟的城市(比如印度,偏移+5.5小时=19800秒),假设原UTC时间分钟是12,本地时间分钟应该是12+30=42,但相加后的时间戳对应的UTC时间分钟是42,这时候getUTCMinutes()拿的是42,看似对,但本质是你搞反了:你要的是本地时间的分钟数,应该用getMinutes(),而不是getUTCMinutes()。

核心错误就是:你创建的Date对象已经是本地时间的UTC等价物,要获取本地时间字段,得用不带UTC后缀的方法。

修正后的代码

// 生成对应本地时间的Date对象
const localDate = new Date((data.dt + data.timezone) * 1000);
// 获取本地时间的分钟数
const localMinutes = localDate.getMinutes();
// 其他本地时间字段同理,用不带UTC的方法:
const localHours = localDate.getHours();
const localDay = localDate.getDate();

额外说明

  • dt是OpenWeather返回的UTC时间戳(秒为单位)
  • timezone是目标城市相对于UTC的偏移秒数(正的是东时区,负的是西时区)
  • 只有当时区偏移是整小时时,getUTCMinutes()才会和本地分钟数一致;遇到带30/45分钟偏移的时区,就会出现差异,所以必须用getMinutes()来获取本地分钟数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:26:11