【问题标题】:Javascript Date().getTimezoneOffset() to use iphone setting timezone instead of physical timezone?Javascript Date().getTimezoneOffset() 使用 iphone 设置时区而不是物理时区?
【发布时间】:2019-09-16 09:32:06
【问题描述】:

"new Date().getTimezoneOffset()" 似乎总是返回物理位置时间偏移,无论您的设备时区设置是什么。

例如,如果我早上 9 点在西雅图,则 iphone 时区设置为自动。 iPhone 在上午 9 点显示正确时间,getTimezoneOffset() 返回 420。 将 iphone 时区更改为手动,蒙特利尔,电话时间变为下午 12 点。但是,getTimezoneOffset() 仍然返回 420,而我希望像东海岸时间一样拥有 240。

我想测试时区处理。我如何实现这一目标(实际上不飞往蒙特利尔)?

(编辑澄清) 将 iPhone 时区设置为多伦多(偏移量 -04:00),

moment().utcOffset()

返回真实设备时区 -420,而不是时区设置 -240。

(编辑 2) 请注意,我想获取 iPhone 时区设置,而不是通过字符串硬编码特定时区。

【问题讨论】:

  • 您是否尝试过使用 Moment.js 库?这里stackoverflow.com/questions/29295846/…
  • @HarshitAgrawal 我试过 const minOffset = moment().tz('America/Seattle').utcOffset() - moment().utcOffset();并得到 0 个偏移量。
  • 这可能是 iPhone 特有的东西。某些浏览器不会读取系统时区,除非在启动时读取一次。更改设置后尝试杀死浏览器并重新启动它。
  • 另外,America/Seattle 不是有效的 IANA 时区标识符,本地时间功能不需要 moment-timezone。
  • @oiman 你说“没有浏览器”。如果您确实在浏览器中运行 new Date().getTimezoneOffset() 会发生什么?与您的应用相同的行为?

标签: javascript date react-native timezone


【解决方案1】:

找到了问题——它是缓存的时区数据。要重置它,请执行以下操作:

moment.tz.guess(true)  // ignore cache and detect it again

那么,

moment().utcOffset()

现在是正确的。

【讨论】:

    猜你喜欢
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 2017-10-15
    • 2017-03-17
    • 2014-10-18
    • 1970-01-01
    相关资源
    最近更新 更多