【问题标题】:Get the users local time accurately准确获取用户当地时间
【发布时间】:2014-08-19 09:27:13
【问题描述】:

我正在做一个主要使用 javascript、css、html5 的项目。无论用户位于何处,我都需要准确获取本地时间,以允许用户在特定日期访问模块。 假设 1 September.

如何准确获取用户当地时间?

选项:

1:使用JavaScript获取用户本地时间并使用。

问题:用户可以手动更改其系统的日期时间设置,以更改日期并提前访问模块。

2:使用服务器日期时间在特定日期启用模块。

问题:服务器可能位于任何地方,例如:在美国,除非美国的日期是 9 月 1 日,否则澳大利亚的人将无法访问该模块。

还有其他选择吗?

是否可以选择使用客户端 IP 地址?

【问题讨论】:

  • 你不能依赖 JS 日期,这是用户控制的。您也不能依赖 IP,因为请求可能来自代理。这个问题真的没有答案,除了如果你不能信任你的用户,你可以使用的数据是不可靠的。
  • 您不能相信用户的时间或他们报告的任何其他内容(他们可能会撒谎)。而且您不能相信他们的 IP 来反映他们的位置(可能是 VPN,这可能是私有的,因此在任何 IP 查找中都不会被识别出来。尽管这本身就是一个问题:如果美国的雇员公司在澳大利亚的家中工作,什么时区适合您的目的?)。夏季时间(等)选项怎么样 - 你真的需要关心当地时间吗?对于一个真正强大、一致且没有争议的方法,您可能需要一个平坦的地球(我只是半开玩笑......)
  • 我认为您仍然可以使用服务器时间并使用其本地数据中的数据(使用 javascript)来仅获取时区。如果您仍然不能信任您的用户,您可以要求他们确认时区,或者从一开始就自行选择。
  • IP 与系统时间一样可靠。客户端始终可以使用代理连接到您的站点。

标签: javascript php html


【解决方案1】:

好吧,用户的时间/日期信息不包含在 http 请求标头中,因此 php 不会自动拥有该信息。正如您所说,您可以使用 javascript 来获取用户的时间,类似于此处发布的内容:Determine a User's Timezone - 这是纯 javascript,如果您使用 jquery 或类似的东西,您可以很容易地做到这一点。

但是,如果这些是注册用户,您可以允许他们在其个人资料/设置中设置时区,然后只需使用该设置,因此即使他们正在旅行,他们也将始终设置为“家”时区。

这有帮助吗?

【讨论】:

    【解决方案2】:

    首先,您应该始终假设用户可能会伪造他计算的任何数据。因此使用服务器时间更可靠。

    使用 IP 是一种选择 - 您可以找到允许您将 IP 解析为其所在国家/地区的服务和数据库。例如:http://php.net/manual/en/book.geoip.php

    最后 - 为什么您希望不同国家/地区的发布日期有效地不同?他们总是可以使用其他国家的某人以他们的名义访问模块。

    【讨论】:

    • 仅了解所在国家/地区不足以准确获取当地时间,因为一个国家/地区可能有多个时区。
    • 是的,但是大多数数据库也会返回州/地区。甚至在 PHP 文档中提到了 PHP 扩展(添加到原始回复中)。
    • 好的,如果 IP 地址可以解析为州/地区,那么我会更正。
    【解决方案3】:

    如果用户授予权限,并且正在使用支持的浏览器等,您可以使用navigator.geolocation.getCurrentPosition()获取他们的位置。

    有关参数和更多信息,请参阅developer.mozilla.org/en-US/docs/Web/API/Geolocation.getCurrentPosition

    然后您可以使用geonames.org 提供的服务。例如,http://api.geonames.org/timezone?lat=47.01&lng=10.2&username=demo。这将返回给定坐标的时间。

    根据第一条评论更新:当然,您永远不能相信任何来自外部的数据。但是你可以做一些事情来提高信心。这并不是一个完整的独立解决方案。

    【讨论】:

    • 无论你如何获得时区,最终你仍然依赖于用户发送的数据。任何人都可以发送任何内容。
    • 当然可以。这已在此处的其他地方进行了介绍,并且是每个人首先学习的内容之一。这只是添加更多选项的基本答案。在我看来,这个问题没有单一的正确答案,它需要结合各种因素来提高信心水平。
    • 我明白这一点,但我仍然认为这不是答案。如果用户决定他将欺骗他的位置,那么他将能够更改他发送的内容他的 IP。除了“不可能,想办法不关心用户是否伪造他们的位置”之外,这个问题没有其他答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    相关资源
    最近更新 更多