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

如何使用Day.js获取考虑冬夏令时的精简时区名称列表

解决Day.js获取考虑冬夏令时的精简时区列表问题

Day.js本身没有直接提供精简的时区列表,但可以通过时区插件结合自定义过滤来实现,步骤如下:

1. 引入必要插件

首先确保安装并引入Day.js的UTC和时区插件:

import dayjs from 'dayjs'
import utc from 'dayjs/plugin/utc'
import timezone from 'dayjs/plugin/timezone'

dayjs.extend(utc)
dayjs.extend(timezone)

2. 过滤出含冬夏令时变化的时区

通过对比同一时区在不同月份的UTC偏移量,判断是否存在冬夏令时切换,以此过滤出符合要求的时区:

function getDSTTimezones() {
  const allTimezones = dayjs.tz.names()
  const dstTimezones = []

  for (const tz of allTimezones) {
    // 取当年1月(标准时间)和7月(夏令时)的UTC偏移
    const janOffset = dayjs.tz('2024-01-01', tz).utcOffset()
    const julOffset = dayjs.tz('2024-07-01', tz).utcOffset()

    // 偏移不同说明该时区有冬夏令时变化
    if (janOffset !== julOffset) {
      dstTimezones.push(tz)
    }
  }

  return dstTimezones
}

// 调用获取结果
const filteredTimezones = getDSTTimezones()

3. 可选:手动维护常用时区列表

如果需要更精简的常用时区集合,可以直接手动定义(仅保留有冬夏令时变化的常用时区):

const commonDSTTimezones = [
  'America/New_York',
  'America/Chicago',
  'America/Denver',
  'America/Los_Angeles',
  'Europe/London',
  'Europe/Paris',
  'Europe/Berlin',
  'Australia/Sydney',
  'Canada/Toronto',
  'Brazil/Sao_Paulo'
]

说明:Day.js的时区列表和Moment.js来自同一数据库,dayjs.tz.names()返回的全量列表和moment.tz().names()一致,通过上述过滤方法可以得到仅包含冬夏令时变化的精简列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 02:37:01