Elm 如何确定用户';埃尔姆的当地时区是什么?

Elm 如何确定用户';埃尔姆的当地时区是什么?,elm,Elm,我想在elm中获取一个表示用户本地日期和时间的日期。我已经看了核心和包装 elm时间包有一个ZonedDateTime,但必须向其提供一个时区值,因此,必须提前知道时区 这个问题的核心是可靠地确定用户的时区。我提出的最好的解决方案是将用户的时区偏移量作为应用程序标志传递,并相应地修改UTC日期。它看起来像是日期。现在任务将在生成的日期中返回时区信息。但是,我没有找到任何实际允许访问的Dateapi函数 但是,一旦您有了日期,我就能够使用从软件包到原始分钟偏移量的函数。你可以试着从这个偏移量推断出

我想在elm中获取一个表示用户本地日期和时间的日期。我已经看了核心和包装

elm时间包有一个
ZonedDateTime
,但必须向其提供一个
时区
值,因此,必须提前知道时区


这个问题的核心是可靠地确定用户的时区。我提出的最好的解决方案是将用户的时区偏移量作为应用程序标志传递,并相应地修改UTC日期。

它看起来像是
日期。现在
任务将在生成的
日期中返回时区信息。但是,我没有找到任何实际允许访问的
Date
api函数

但是,一旦您有了
日期
,我就能够使用从软件包到原始分钟偏移量的函数。你可以试着从这个偏移量推断出一个时区

或者,您可以
toString
返回的
Date
并将其解析出来。它以如下字符串结束:

提供

Intl.DateTimeFormat().resolvedOptions().timeZone
它返回一个字符串,如
“Australia/Sydney”
,或
undefined


根据

的说法,在现代浏览器中,浏览器支持似乎很强,JavaScript不公开客户端机器的时区,因此Elm没有办法做到这一点。您只能访问偏移量,该偏移量可用于根据当前偏移量猜测已知时区。你最好的办法是让用户提供他们喜欢的时区。对于将其标记为重复的主持人来说,这是特定于Elm的,Elm是一种不同于Javascript的编程语言。为什么会这样?我想帮忙。您正在询问如何检测用户的时区。这就需要浏览器的功能——要么通过
Intl
API,要么通过战略性地询问
Date
对象,就像jsTimeZoneDetect和
moment.tz.guess一样。您自己已经表示jsTimeZoneDetect解决方案对您来说是合理的。与dup相关的答案解决了所有这些问题。与其说是敌意,不如说是对这种不负责任的节制的恼怒。这是一个纯函数式语言特有的问题,您已将其标记为javascript问题的副本。是的,Elm允许用户在需要时下载javascript,不幸的是,这是目前最好的解决方案。但是,这仍然是一个特定于Elm的问题,您将其标记为重复并推广您的无关答案,这对Elm社区是一种伤害。标题和标签都清楚地表明这是针对Elm的。该问题链接到Elm API文档。我不会武断地编辑这个问题,这样你就可以为自己的错误辩护。不可能从偏移量可靠地推断出时区,因为时区与特定的国家和它选择的夏时制开始和结束日期有着内在的联系。例如,你可能会看到时间偏移GMT-0500,因为你在美国东部时区,现在是冬天,所以东部标准时间生效,或者你在美国中部时区,现在是夏天,所以中部夏时制生效,或者你在哥伦比亚,不遵守DST,所以时间偏移是UTC-5年一次。如果你在计算日期,这将很重要;例如,如果你问“24小时前是几点?”,你得到的答案通常是“和现在一样”。但如果你的时区刚刚经历了“向前跳”或“向后退”的夏令时转换,那么答案可能是“现在是13:45,但24小时前是12:45(或14:45)”。除非你的应用程序在Columbia使用,Columbia不会进行这些转换。因此,知道正确的时区对于某些应用程序来说很重要,而且不可能仅从偏移量就知道确切的时区。此外,如果您试图使用IP地理位置来确定时区,请不要这样做。这也不可靠。很多人出于各种原因使用VPN;如果您的哥伦比亚用户正在使用VPN访问其在美国的公司网络,并且在仍然登录其美国VPN的情况下使用您的Elm应用程序,您将为他计算不正确的时区,并且您的应用程序将在3月的第2个星期日和11月的第1个星期日生成不正确的结果。(或者如果美国国会决定再次更改这些日期,则在不同的日期)因此IP地理定位对于时区来说是不可靠的。这些观点是正确的。这是我在写作时能找到的最好的Elm语言答案。我认为如果你真的想知道用户的时区,应用程序需要向他们询问。