微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 date-fns-tz 检测时区缩写?

如何解决如何使用 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

Demo using MomentJS

现在我使用 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)将适用于建议的语言环境

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。