使用 luxon 检测时区缩写
Detect timezone abbreviation using luxon
带有短时区缩写的时刻时区结果,例如
moment.tz([2012, 0], 'America/New_York').format('z'); // EST
moment.tz([2012, 5], 'America/New_York').format('z'); // EDT
有没有类似的方法我们可以使用 luxon 来实现
我尝试了 offsetNameShort
,但是,对于像 "2020-05-23T13:30:00+05:30"
这样的日期,结果是 GMT+5:30
类似DateTime.fromISO(""2020-05-23T13:30:00+05:30"").toFormat('z')
的东西也不起作用
有没有办法从格式中删除 +5:30
时区?
回顾Luxon's table of formatting tokens。您需要 ZZZZ
作为缩写的命名偏移量。
示例:
DateTime.fromObject({year: 2012, month: 1, zone: 'America/New_York'})
.toFormat('ZZZZ') //=> "EST"
DateTime.fromObject({year: 2012, month: 6, zone: 'America/New_York'})
.toFormat('ZZZZ') //=> "EDT"
DateTime.local()
.toFormat('ZZZZ') //=> "PDT" (on my computer)
DateTime.fromISO("2020-05-23T13:30:00+05:30", {zone: 'Asia/Kolkata', locale: 'en-IN'})
.toFormat('ZZZZ') //=> "IST"
请注意,在最后一个中,您还必须指定 en-IN
作为区域设置才能获得 IST
。否则你会得到 GMT+05:30
,除非系统语言环境是 already en-IN
。这是因为 Luxon 依赖于浏览器的国际化 API,后者又从 CLDR.
获取数据
在 CLDR 中,许多名称和缩写被指定为特定于给定区域设置,而不是在全球范围内使用。同样的事情发生在 Europe/London
得到 GMT+1
而不是 BST
除非语言环境是 en-GB
。 (我个人不同意这一点,但这就是目前的实施方式。)
只需简单地使用
const shortDate = new Date().toLocaleTimeString('en-us',{timeZoneName:'short'});
console.log(shotrDate.split(' ')[2]); // EST
带有短时区缩写的时刻时区结果,例如
moment.tz([2012, 0], 'America/New_York').format('z'); // EST
moment.tz([2012, 5], 'America/New_York').format('z'); // EDT
有没有类似的方法我们可以使用 luxon 来实现
我尝试了 offsetNameShort
,但是,对于像 "2020-05-23T13:30:00+05:30"
GMT+5:30
类似DateTime.fromISO(""2020-05-23T13:30:00+05:30"").toFormat('z')
的东西也不起作用
有没有办法从格式中删除 +5:30
时区?
回顾Luxon's table of formatting tokens。您需要 ZZZZ
作为缩写的命名偏移量。
示例:
DateTime.fromObject({year: 2012, month: 1, zone: 'America/New_York'})
.toFormat('ZZZZ') //=> "EST"
DateTime.fromObject({year: 2012, month: 6, zone: 'America/New_York'})
.toFormat('ZZZZ') //=> "EDT"
DateTime.local()
.toFormat('ZZZZ') //=> "PDT" (on my computer)
DateTime.fromISO("2020-05-23T13:30:00+05:30", {zone: 'Asia/Kolkata', locale: 'en-IN'})
.toFormat('ZZZZ') //=> "IST"
请注意,在最后一个中,您还必须指定 en-IN
作为区域设置才能获得 IST
。否则你会得到 GMT+05:30
,除非系统语言环境是 already en-IN
。这是因为 Luxon 依赖于浏览器的国际化 API,后者又从 CLDR.
在 CLDR 中,许多名称和缩写被指定为特定于给定区域设置,而不是在全球范围内使用。同样的事情发生在 Europe/London
得到 GMT+1
而不是 BST
除非语言环境是 en-GB
。 (我个人不同意这一点,但这就是目前的实施方式。)
只需简单地使用
const shortDate = new Date().toLocaleTimeString('en-us',{timeZoneName:'short'});
console.log(shotrDate.split(' ')[2]); // EST