6

具有短时区缩写的时刻时区结果,例如

moment.tz([2012, 0], 'America/New_York').format('z');    // EST
moment.tz([2012, 5], 'America/New_York').format('z');    // EDT

有没有类似的方法可以使用 luxon 来实现

我试过offsetNameShort了,但是,结果是GMT+5:30这样的日期"2020-05-23T13:30:00+05:30"

类似的东西DateTime.fromISO(""2020-05-23T13:30:00+05:30"").toFormat('z')也不起作用

有没有办法可以+5:30从格式中删除时区?

4

2 回答 2

8

查看Luxon 的格式化标记表。您想要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,除非系统语言环境已经 en-IN存在。这是因为 Luxon 依赖于浏览器的国际化 API,而后者又从CLDR获取数据。

在 CLDR 中,许多名称和缩写被指定为特定于给定语言环境,而不是在全球范围内使用。Europe/London获取GMT+1而不是除非BST语言环境是en-GB. (我个人不同意这一点,但这就是目前的实施方式。)

于 2020-05-26T16:27:25.477 回答
0

只需简单地使用

const shortDate = new Date().toLocaleTimeString('en-us',{timeZoneName:'short'});
console.log(shotrDate.split(' ')[2]); // EST
于 2022-01-11T19:48:48.137 回答