javascript - 如何使用 date-fns-tz 检测时区缩写?
问题描述
我想打印时区缩写,如:IST、UTC、PST、MST、CST、EST 等...
我正在将我的代码从 momentJS 迁移到 date-fns 并遇到以下问题。当我使用 momentJS 时,一切都按预期工作。例如,下面的代码将打印“ IST ”
const timeZone = 'Asia/Calcutta';
moment.tz(new Date(), timeZone).format('z'); // IST
现在我使用date-fns的代码可以工作,但不是一直有效,因为它打印“印度标准时间”,我只想打印IST。
format(parisDate, 'zzzz', { timeZone: 'Asia/Calcutta', locale: enGB }); // India Standard Time
谁能告诉我我错过了什么或做错了什么?这是我的代码的现场演示:date-fns DEMO
解决方案
在检查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)将适用于建议的语言环境
推荐阅读
- python-3.x - Python 2.7 到 3.6 代码移植问题——将 xml 数据复制到列表
- javascript - 无法连接到 Firebase(JS)
- stm32 - ST-LINK 未连接到目标
- c# - 未为特定内容作者用户加载 Sitecore 体验编辑器功能区控件
- oauth-2.0 - 检查跨多个应用程序的用户身份验证和数据共享的最佳实践
- c# - 将按钮添加到另一个应用程序消失
- android - 无法导入 android.nfc.NfcAdapter
- javascript - 为什么执行 Object.create(null) 并稍后将其原型设置为 Object.prototype 将不允许执行 Object.prototype 中的方法
- python - 在 django 中渲染乳胶/mathjax 方程
- spring-boot - SpringBoot(不是 web 项目)可以在 IDE 中运行,但不能在 JAR 中运行