我正在开发一个主要使用javascript,css,html5的项目。我需要准确地获取用户所在位置的本地时间,以允许用户在特定日期访问模块。 假设 1 September
。
如何准确地获取用户当地时间?
选项:
1:使用JavaScript获取用户本地时间并使用它。
问题:用户可以手动更改系统的日期时间设置,以更改日期并过早访问模块。
2:使用服务器日期时间在特定日期启用模块。
问题:服务器可能位于任何地方,例如:在美国,澳大利亚人无法访问该模块,除非美国的日期是9月1日。
还有其他选择吗?
是否使用客户端IP地址?
答案 0 :(得分:0)
首先,您应该始终假设用户可能伪造他身边计算的任何数据。因此使用服务器时间更可靠。
使用IP是一个选项 - 您可以找到允许您将IP解析到其所在国家/地区的服务和数据库。示例:http://php.net/manual/en/book.geoip.php
最后 - 为什么您希望各个国家/地区的发布日期有效?他们总是可以使用其他国家/地区的某个人来访问其名称中的模块。
答案 1 :(得分:0)
好吧,用户的时间/日期信息不包含在http请求标头中,因此php不会自动拥有该信息。正如你所说,你可以使用javascript来让用户的时间与这里发布的内容类似:Determine a User's Timezone - 这是纯粹的javascript,如果你使用jquery或类似的东西,你可以很容易做到。
如果这些是注册用户,你可以允许他们在他们的个人资料/设置中设置一个时区,然后只使用那个设置,所以即使他们正在旅行,他们也会被设置为" home& #34;时区。
有帮助吗?
答案 2 :(得分:0)
如果用户授予权限并使用支持的浏览器等,您可以使用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。这将返回给定坐标的时间。
根据第一条评论进行更新:当然,您永远不会相信任何来自外部的数据。但你可以做些事情来提高自信心。这并不是一个完全独立的解决方案。