【问题标题】:How to detect timezone abbreviation using date-fns-tz?如何使用 date-fns-tz 检测时区缩写?
【发布时间】:2021-04-01 14:35:37
【问题描述】:

我想打印timeZone abbreviation,例如:IST、UTC、PST、MST、CST、EST 等...

我正在将我的代码从 momentJS 迁移到 date-fns 并遇到以下问题。当我使用 momentJS 时,一切都按预期工作。例如,下面的代码将打印“IST

const timeZone = 'Asia/Calcutta';
moment.tz(new Date(), timeZone).format('z'); // IST

Demo using MomentJS

现在我使用 date-fns 的代码可以工作,但不是一直有效,因为它会打印 "India Standard Time" 而我只想打印 IST强>。

format(parisDate, 'zzzz', { timeZone: 'Asia/Calcutta', locale: enGB }); // India Standard Time

谁能告诉我我错过了什么或做错了什么? 这是我的代码的现场演示:date-fns DEMO

【问题讨论】:

  • 有趣的问题。我找到了解决方案,但无法解释原因...您应该导入不同的语言环境(默认为 en-US)。导入import enGB from 'date-fns/locale/en-GB',然后在您的示例中更改为const zoneString = format(utcToZonedTime(new Date(), timeZone), 'zzz', {locale: enGB}); 即可完成这项工作。但是,我无法理解为什么时区缩写与图书馆的语言环境相关联。我会阅读文档,也许会上传一个正确的答案。
  • @antoniom 我导入了您的建议并进行了更改,但它会打印“GMT+5:30”。它不起作用
  • 奇怪...适合我...看看这里github.com/marnusw/date-fns-tz#format
  • @antoniom 你是在打印“印度标准时间”还是 IST”?我想打印“IST”
  • 请使用“en-IN”作为区域设置再次重试。并将date-fns升级到最新版本(2.16.1)

标签: javascript timezone momentjs date-formatting date-fns


【解决方案1】:

在检查date-fns-tz 的代码后,发现它不会自己生成时区缩写,而是使用浏览器的 Intl API。时区缩写因地区而异。 诸如“en-US”或“en-GB”之类的语言环境不包含 IST 作为时区缩写,而“en-IN”包含。 因此,您需要

import enIN from 'date-fns/locale/en-IN'

然后将其作为第三个参数传递给您的format 调用 即

import { utcToZonedTime, format } from "date-fns-tz";
const timeZone = "Asia/Kolkata"
const zoneString = format(utcToZonedTime(new Date(), timeZone), "zzz", {
  timeZone,
  locale: enIN
});

但这并不能保证其他缩写(例如 CET)也适用于建议的语言环境

【讨论】:

  • 您当前的解决方案仅适用于印度。因为如果 timeZone = 'Europe/Paris' 则 zoneString 的值为 GMT+1 而不是打印“CEST”。希望这是有道理的。
  • 我想知道是否有一种方法可以一次从 date-fns/locale 导入所有内容,例如 date-fns/locale/* ?
  • 恐怕达不到想要的效果。似乎不同的语言环境会返回不同的缩写时区。例如,我所在国家/地区的语言环境('el' / 希腊)可以很好地应对每个欧洲时区(CEST、EET 等),但不适用于 IST 或 EST。
  • momentJS 能够完成这项任务,但由于某种原因,使用 date-fns 似乎很棘手
  • 如果我错了,请纠正我,但moment-timezone 似乎正在使用查找表来报告“IST”。这是一种完全不同的技术
猜你喜欢
  • 2023-01-17
  • 2019-06-30
  • 2020-12-18
  • 2022-12-17
  • 2021-09-27
  • 2020-09-13
  • 2010-12-29
  • 2021-05-07
相关资源
最近更新 更多