在 Javascript 中获取时区的 utc 偏移量

2023-12-14

我需要一个 Javascript 函数,给定时区,返回当前 UTC 偏移量。

例如,theFuncIneed('US/Eastern') -> 240


如今这已成为可能Intl API:

实施Intl是基于icu4c。如果您挖掘源代码,您会发现时区名称因区域设置而异,例如:

for (const locale of ["ja", "en", "fr"]) {
  const timeZoneName = Intl.DateTimeFormat(locale, {
    timeZoneName: "short",
    timeZone: "Asia/Tokyo",
  })
    .formatToParts()
    .find((i) => i.type === "timeZoneName").value;
  console.log(timeZoneName);
}

幸运的是,有一个地方,国际语(语言标签是ia),它使用相同的模式(例如GMT+11:00) 用于时区名称。

下面的代码片段可以满足您的需求:

const getOffset = (timeZone) => {
  const timeZoneName = Intl.DateTimeFormat("ia", {
    timeZoneName: "short",
    timeZone,
  })
    .formatToParts()
    .find((i) => i.type === "timeZoneName").value;
  const offset = timeZoneName.slice(3);
  if (!offset) return 0;

  const matchData = offset.match(/([+-])(\d+)(?::(\d+))?/);
  if (!matchData) throw `cannot parse timezone name: ${timeZoneName}`;

  const [, sign, hour, minute] = matchData;
  let result = parseInt(hour) * 60;
  if (sign === "+") result *= -1;
  if (minute) result += parseInt(minute);

  return result;
};

console.log(getOffset("US/Eastern")); // 240
console.log(getOffset("Atlantic/Reykjavik")); // 0
console.log(getOffset("Asia/Tokyo")); // -540

这种方法可能有点棘手,但在我的生产项目中效果很好。我希望它也对你有帮助:)

Update

非常感谢 Bort 指出错误。我已经更正了该片段。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Javascript 中获取时区的 utc 偏移量 的相关文章

随机推荐

  • 使用 etree 从文件中解析 xml 在读取字符串时有效,但在读取文件时则无效

    我对 Python 和 SO 来说是一个相对新手 我有一个 xml 文件 需要从中提取信息 我已经为此苦苦挣扎了好几天 但我想我终于找到了可以正确提取信息的东西 现在我在获得正确的输出时遇到了麻烦 这是我的代码 from xml impor
  • Firebase 函数先解析请求正文,然后才能在 Express 中处理它

    我正在尝试处理 Firebase 函数中的无效请求 因此使用无效的 JSON 发出发布请求 目的是在 Express 中处理它 但我得到400 错误 语法错误 JSON 中位置 20 处出现意外标记 a 在它到达 Express 层之前 最
  • WCF SOAP - 从子节点中删除命名空间

    我正在构建一个服务 并且有一个客户端需要我尝试在我的肥皂服务中接收的特定格式的 xml 我遇到的问题是 当我需要仅在根节点上时 命名空间前缀应用于子节点 下面是在soapui中为请求生成的soap信封
  • 这些 Git 合并标记的简单解释是什么?

    下面参考代码段1 2 3解释Git合并标记的含义 Code from beginning of file lt lt lt lt lt lt lt HEAD code segment 1 merged common ancestors co
  • 为什么linux内核中的udelay和ndelay不准确?

    我做了一个这样的函数 trace printk 111111 udelay 4000 trace printk 222222 日志显示它是 4 01 毫秒 没问题 但当我这样打电话时 trace printk 111111 ndelay 1
  • 如何在 CORS 预检选项请求中发送自定义标头?

    我正在尝试发送 JSON 负载的 CORS 请求 我控制服务器和客户端 我在这里跟随 服务器有一个自定义标头 必须与每个请求一起发送 因此 此自定义标头使请求 不简单 因此必须使用 OPTIONS 请求对请求进行预检 我可以看到 jQuer
  • Rails 4 应用程序中的子域

    今天我遇到了一个很奇怪的现象 当开发一个每个用户都有自己的子域的 Rails 应用程序并尝试使用 Devise 来完成此操作时 我遇到了未注册的子域也会路由到根页面的情况 因此 例如 即使没有 显式 子域 它也会将我路由到主应用程序页面 也
  • Excel编程

    我想让我男朋友尝尝编程的滋味 如果由我决定 我会教Scheme Haskell 或F 但因为他更愿意学习一些对他作为财务顾问的工作有用的东西 即Excel 编程 Excel 编程有哪些选项 对于刚刚学习编程但想要完成任务的人 您会推荐哪一款
  • 将长文本换行到下拉列表中?

    我的 asp net 页面上的下拉列表中有清晰的长文本 它违反了 UI 边界并超出了 UI 的分配区域 无论如何 我可以使用 CSS 或 javascript 包裹 而不是修剪 它吗 我必须显示整个字符串 无论它有多长 更长的答案 是的 您
  • 测试数据中因子水平未知的 Predict.lm()

    我正在拟合一个模型来分解数据并进行预测 如果newdata in predict lm 包含模型未知的单个因素水平 all of predict lm 失败并返回错误 有没有好的方法可以拥有predict lm 返回模型已知的因子水平的预测
  • 为什么-2147483648在可以容纳int的情况下会自动提升为long?

    include
  • 在 Eclipse 中为从 Eclipse 启动的应用程序指定替代 JRE

    我正在尝试在 Eclipse 中为我将从 Eclipse 启动的应用程序指定一个替代 jre 我的默认值是 1 6 我需要使用 jdk 1 4 2 运行 我不确定我在以下代码中是否做了正确的事情 Path jreContainerPath
  • bash:替换“”内的变量值

    抱歉 如果问题非常简单 但我是 shell 脚本的新手 我正在尝试写这样的东西 for i in 1 20 do curl something i d something i something done 问题是第二个 i单引号内的部分 不
  • MySQL别名简写?

    我需要从两个表中选择所有列 但需要能够在结果中区分它们 是否有一种简写方法可以为结果中的每一列指定一个别名 例如 SELECT t1 AS t1 SOMETHING t2 AS SOMETHING ELSE FROM TABLE1 INNE
  • 阻止仙人掌图上的有向路径[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我想找到最长的路径距离仙人掌图具有某些阻塞定向路径 For example if we have following 4 nodes 这意味着 如果我们访问 1 我们就无法访问 2 也
  • 如何在jqGrid表单中添加简单的文本标签?

    当从寻呼机使用 添加 或 编辑 表单时 我想知道如何在表单中添加一个简单的静态标签 而不创建任何对 colNames 和 colModel 产生影响的附加列 例如 我有一个非常简单的典型添加表单 它从包含一些标签和表单元素的寻呼机打开 名称
  • AutoMapper 3.1.1 和 Entity Framework 6.1 代理对象

    我意识到已经有人问过这个问题 但到目前为止我读过的解决方案似乎没有什么作用 我正在使用 Entity Framework 6 1 和 AutoMapper 3 1 1 采取以下对象 Company and CompanyListItem 我
  • 列出所有外键 PostgreSQL

    我需要一个返回的查询 表名 字段名 字段类型 约束名 到目前为止我有 select conrelid regclass AS table name regexp replace pg get constraintdef c oid 1 as
  • Gradle,命令行“cmd”、“/c”、“echo doLast!”什么也没做

    我正在读关于Gradle 执行程序并创建了以下内容build gradle task startTomcat type Exec commandLine cmd c echo init startTomcat task stopTomcat
  • 在 Javascript 中获取时区的 utc 偏移量

    我需要一个 Javascript 函数 给定时区 返回当前 UTC 偏移量 例如 theFuncIneed US Eastern gt 240 如今这已成为可能Intl API 实施Intl是基于icu4c 如果您挖掘源代码 您会发现时区名