首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从JavaScript中的日期字符串中获取时区

从JavaScript中的日期字符串中获取时区
EN

Stack Overflow用户
提问于 2021-03-15 17:22:57
回答 2查看 353关注 0票数 2

我正在编写一个函数,该函数应该检查给定的dateString是否与浏览器timeZone具有相同的timeZone。要获得浏览器timeZone,我可以使用a) Intl.DateTimeFormat().resolvedOptions().timeZone (例如返回Europe/Amsterdam )或b)返回-60new Date().getTimeZoneOffset()。两人都很好。

棘手的部分是从我想传递的timeZone中获取dateString,例如:2021-01-01T00:00:00-05:00 (应该是America/New_York300 AFAIK)。我怎样才能从那个日期得到timeZone呢?我尝试过这样做:new Date('2021-01-01T00:00:00-05:00').getTimeZoneOffset(),但这将再次将其转换为浏览器的timeZone,并返回-60

功能示例:

代码语言:javascript
运行
复制
function isSameTimeZone(date) {
  // function to get time zone here


  const a = getTimeZone(date)
  return a === new Date().getTimeZoneOffset() || Intl.DateTimeFormat().resolvedOptions().timeZone
}

测试案例

2021-01-01T00:00:00-08:00 (SF)

2021-01-01T00:00:00-05:00 (纽约)

2021-01-01T00:00:00+05:30 (孟买)

2021-01-01T00:00:00+01:00 (阿姆斯特丹)

有人找到解决办法了吗?提前感谢!

EN

Stack Overflow用户

发布于 2021-03-15 19:36:42

这是我的方法;

代码语言:javascript
运行
复制
function checkTimezone(dateString) {
  const testDate = new Date(dateString);
  const dateRegex = /\d{4}-\d{2}-\d{2}/;
  const myDate = new Date(testDate.toISOString().match(dateRegex)[0]);
  
  return !(testDate - myDate);
}

const testCases = ['2021-01-01T00:00:00-05:00', '2021-01-01T00:00:00-08:00', '2021-01-01T00:00:00-05:00', '2021-01-01T00:00:00+05:30', '2021-01-01T00:00:00+01:00'];
testCases.forEach(testCase => console.log(checkTimezone(testCase)));

下面是它的工作原理,您传递日期字符串并使用它创建一个new Date()实例。

然后,我使用Date.ISOString()方法获得ISO字符串,并将其与原始字符串匹配,以获得日期,并在不需要时间的情况下从其中创建另一个Date实例。

然后,我找出差异(以毫秒为单位),并将其转换为分钟。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66642676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档