[英]Get timezone name/list using timezone offset
我使用以下代码进行时区偏移。 我想找出与时区偏移关联的时区名称列表。
新日期().getTimezoneOffset().toString()
我认为您必须为此使用moment-timezone.js
库。
(链接在这里: https : //momentjs.com/timezone/ )
该方法应遵循以下原则:
moment.tz.names()
函数获取所有可用的时区位置。 moment.tz.zone(name)
函数获取区域对象 offsets
属性获取位置偏移量 该代码将如下所示:
const tzNames = moment.tz.names(); const map = new Map(); for (const name of tzNames) { const offsets = moment.tz.zone(name).offsets; for (const offset of offsets) { if (!map.has(offset)) { map.set(offset, new Set()); } map.get(offset).add(name); } } const currentOffset = new Date().getTimezoneOffset(); const offsetList = map.get(currentOffset); console.log('currentOffset: ' + currentOffset); console.log('offset list size: ' + offsetList.size); console.log('Total different offsets: ' + map.size); console.log('List items: '); for (const item of offsetList) { console.log(item); }
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data-2012-2022.min.js"></script>
您可以使用intl
object、本地“ia”(参见https://stackoverflow.com/a/64262840/1061871 )和Intl.supportedValuesOf('timeZone')
( https://developer. mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Intl/supportedValuesOf ):
const getOffset = (tz) => Intl.DateTimeFormat("ia", {
timeZoneName: "shortOffset",
timeZone: tz
})
.formatToParts()
.find((i) => i.type === "timeZoneName").value // => "GMT+/-OFFSET in hh:mm"
.slice(3); //remove the GMT to get the offset in hh:mm
const getTZList = (offset) =>
Intl.supportedValuesOf('timeZone').filter(tz => getOffset(tz) === offset)
console.log(getTZList("-3:30"), getTZList("")) //for list of timezone in gmt/utc use empty string, not 0
编辑,忘记了:日期 object 以 +/-hh:mm 格式偏移
const getUtcOffset = (dateObject = new Date()) => {
const offset = dateObject.getTimezoneOffset(), o = Math.abs(offset);
return (offset === 0 ? '' : ((offset < 0 ? "+" : "-") + ("00" + Math.floor(o / 60)).slice(-2) + ":" + ("00" + (o % 60)).slice(-2)));
}
console.log(getTZList(getUtcOffset(new Date()))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.