【问题标题】:How do I get the current Time Zone offset without the daylight saving in JavaScript?如何在没有 JavaScript 夏令时的情况下获取当前时区偏移量?
【发布时间】:2020-05-12 17:18:04
【问题描述】:

我的浏览器在芝加哥。 使用时 (new Date()).getTimezoneOffset()/60 我有 5 个小时,因为我们现在处于夏令时。

我需要一个声明来返回 6,因为芝加哥是“(GMT-06:00) Central Time”

无论夏令时如何,我都需要获取所有美国时区用户的偏移量。 如果他们希望他们的请求结果在不同的时区传递,我需要向我的用户显示美国时区的下拉列表。默认应该是当前的。我将使用三角洲。 如何在 JavaScript 中不使用夏令时获取当前时区偏移量?

如果重要的话,我会使用 React。还有“date-fns”,但没有找到获取它的方法。

谢谢。

【问题讨论】:

  • 您可以查看gettimezoneoffset
  • "gettimezoneoffset" 受夏令时影响。如果他们希望他们的请求结果在不同的时区传递,我需要向我的用户显示美国时区的下拉列表。默认应该是当前的。我将使用增量。

标签: javascript timezone-offset


【解决方案1】:

我认为您从错误的角度解决了这个问题。
Javascript 允许根据每个时区直接给出时间
名单在这里:
https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

示例代码

const tzUSA = document.getElementById('Times-Zones-USA');

tzUSA.add = (zoneLib,timVal) =>
  {
  let newRow = tzUSA.insertRow()
  newRow.insertCell().textContent = timVal
  newRow.insertCell().textContent = zoneLib
  }

const OptsZ = timZ =>( { hour12:true, timeZone: timZ });  


let nowD = new Date()

tzUSA.add( 'Chicago central (GMT+6)', nowD.toLocaleString('en-US', OptsZ('Etc/GMT+6') ))

tzUSA.add( 'Chicago', nowD.toLocaleString('en-US', OptsZ('America/Chicago') ))
tzUSA.add( 'Denver', nowD.toLocaleString('en-US', OptsZ('America/Denver') ))
tzUSA.add( 'Phoenix', nowD.toLocaleString('en-US', OptsZ('America/Phoenix') ))
tzUSA.add( 'Los Angeles', nowD.toLocaleString('en-US', OptsZ('America/Los_Angeles') ))
tzUSA.add( 'Anchorage', nowD.toLocaleString('en-US', OptsZ('America/Anchorage') ))
tzUSA.add( 'Honolulu', nowD.toLocaleString('en-US', OptsZ('Pacific/Honolulu') ))
 
td { padding: 0.1em .7em;}
td:first-child { text-align: right;}
<table id="Times-Zones-USA"></table>

【讨论】:

    【解决方案2】:

    如果您只关心浏览器的偏移量,您可以明确声明夏令时不生效的日期。

    这总是返回夏季偏移量:

    new Date('August 1, 2000 00:00:00').getTimezoneOffset()
    

    这总是返回冬季偏移量:

    new Date('November 1, 2000 00:00:00').getTimezoneOffset()
    

    【讨论】:

    • 这如何让我知道我在中部标准时间?
    • 这个答案是基于你的第一句话,主要是问题的标题。您提到您需要在冬季获取浏览器的时间偏移量。这应该做到这一点: new Date('November 1, 2000 00:00:00').getTimezoneOffset() / 60
    • 但是你给了我一个想法来使用:new Date('01/01/2000 00:00:00').toTimeString().substr(9) 来获得“'GMT-0600 (中部标准时间)”在下拉列表中。所以谢谢“
    • 不客气,我更新了答案以更清楚一点。
    猜你喜欢
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 2019-09-06
    • 2018-11-29
    • 2012-08-24
    • 2021-08-28
    相关资源
    最近更新 更多