如何使用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
相关产品推荐
相关产品推荐

